slipwai 1.0.0.dev10__py3-none-any.whl
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.
- slipwai/__init__.py +6 -0
- slipwai/__main__.py +6 -0
- slipwai/_bundle/CHANGELOG.md +3 -0
- slipwai/_bundle/VERSION +1 -0
- slipwai/_bundle/assets/README.md +40 -0
- slipwai/_bundle/assets/adoption/docs/change-strategy.md +137 -0
- slipwai/_bundle/assets/adoption/scripts/check-convergence.py +208 -0
- slipwai/_bundle/assets/adoption/scripts/ratchet.py +250 -0
- slipwai/_bundle/assets/adoption/support.json +424 -0
- slipwai/_bundle/assets/adoption/wrappers/gradle/gradle-wrapper.jar.base64 +834 -0
- slipwai/_bundle/assets/adoption/wrappers/gradle/gradle-wrapper.properties +9 -0
- slipwai/_bundle/assets/adoption/wrappers/gradle/gradlew +248 -0
- slipwai/_bundle/assets/adoption/wrappers/gradle/gradlew.bat +82 -0
- slipwai/_bundle/assets/adoption/wrappers/gradle/source-notes.md +15 -0
- slipwai/_bundle/assets/backing-services/docker-compose.yml +91 -0
- slipwai/_bundle/assets/backing-services/env.example +78 -0
- slipwai/_bundle/assets/backing-services/go/checkpoint_store_contract.go +296 -0
- slipwai/_bundle/assets/backing-services/go/checkpoint_store_memory.go +63 -0
- slipwai/_bundle/assets/backing-services/go/checkpoint_store_memory_test.go +21 -0
- slipwai/_bundle/assets/backing-services/go/checkpoint_store_postgres.go +125 -0
- slipwai/_bundle/assets/backing-services/go/checkpoint_store_postgres_integration_test.go +148 -0
- slipwai/_bundle/assets/backing-services/go/checkpoint_store_sqlite.go +143 -0
- slipwai/_bundle/assets/backing-services/go/checkpoint_store_sqlite_test.go +28 -0
- slipwai/_bundle/assets/backing-services/go/config.go +164 -0
- slipwai/_bundle/assets/backing-services/go/config_test.go +150 -0
- slipwai/_bundle/assets/backing-services/go/event_store_contract.go +849 -0
- slipwai/_bundle/assets/backing-services/go/event_store_memory.go +373 -0
- slipwai/_bundle/assets/backing-services/go/event_store_memory_test.go +93 -0
- slipwai/_bundle/assets/backing-services/go/event_store_postgres.go +762 -0
- slipwai/_bundle/assets/backing-services/go/event_store_postgres_integration_test.go +466 -0
- slipwai/_bundle/assets/backing-services/go/event_store_sqlite.go +736 -0
- slipwai/_bundle/assets/backing-services/go/event_store_sqlite_test.go +137 -0
- slipwai/_bundle/assets/backing-services/go/events.go +396 -0
- slipwai/_bundle/assets/backing-services/go/http_app.go +242 -0
- slipwai/_bundle/assets/backing-services/go/http_app_test.go +268 -0
- slipwai/_bundle/assets/backing-services/go/http_openapi_test.go +47 -0
- slipwai/_bundle/assets/backing-services/go/http_security.go +97 -0
- slipwai/_bundle/assets/backing-services/go/http_security_test.go +92 -0
- slipwai/_bundle/assets/backing-services/go/migrate_main.go +145 -0
- slipwai/_bundle/assets/backing-services/go/migrate_main_test.go +86 -0
- slipwai/_bundle/assets/backing-services/go/migrations_embed.go +22 -0
- slipwai/_bundle/assets/backing-services/go/migrations_keep +3 -0
- slipwai/_bundle/assets/backing-services/go/oidc_keycloak.go +105 -0
- slipwai/_bundle/assets/backing-services/go/oidc_keycloak_test.go +63 -0
- slipwai/_bundle/assets/backing-services/go/openapi.yaml +140 -0
- slipwai/_bundle/assets/backing-services/go/projections.go +264 -0
- slipwai/_bundle/assets/backing-services/go/projections_test.go +404 -0
- slipwai/_bundle/assets/backing-services/go/projections_ticker.go +130 -0
- slipwai/_bundle/assets/backing-services/go/projections_ticker_test.go +277 -0
- slipwai/_bundle/assets/backing-services/go/read_models.go +115 -0
- slipwai/_bundle/assets/backing-services/go/serve_main.go +161 -0
- slipwai/_bundle/assets/backing-services/go/tracing.go +182 -0
- slipwai/_bundle/assets/backing-services/go/tracing_test.go +171 -0
- slipwai/_bundle/assets/backing-services/go/users_oidc_keycloak.go +102 -0
- slipwai/_bundle/assets/backing-services/go/users_oidc_keycloak_test.go +65 -0
- slipwai/_bundle/assets/backing-services/java/actor.java +10 -0
- slipwai/_bundle/assets/backing-services/java/append_result.java +30 -0
- slipwai/_bundle/assets/backing-services/java/causation_id.java +48 -0
- slipwai/_bundle/assets/backing-services/java/checkpoint_store_memory.java +56 -0
- slipwai/_bundle/assets/backing-services/java/checkpoint_store_postgres.java +131 -0
- slipwai/_bundle/assets/backing-services/java/checkpoint_store_sqlite.java +144 -0
- slipwai/_bundle/assets/backing-services/java/committed_event.java +50 -0
- slipwai/_bundle/assets/backing-services/java/condition.java +11 -0
- slipwai/_bundle/assets/backing-services/java/conditional_append_result.java +29 -0
- slipwai/_bundle/assets/backing-services/java/correlation_id.java +55 -0
- slipwai/_bundle/assets/backing-services/java/database_url.java +78 -0
- slipwai/_bundle/assets/backing-services/java/domain_event.java +61 -0
- slipwai/_bundle/assets/backing-services/java/event_store.java +168 -0
- slipwai/_bundle/assets/backing-services/java/event_store_exception.java +21 -0
- slipwai/_bundle/assets/backing-services/java/event_store_memory.java +219 -0
- slipwai/_bundle/assets/backing-services/java/event_store_memory_database.java +144 -0
- slipwai/_bundle/assets/backing-services/java/event_store_postgres.java +714 -0
- slipwai/_bundle/assets/backing-services/java/event_store_sqlite.java +739 -0
- slipwai/_bundle/assets/backing-services/java/event_visitor.java +13 -0
- slipwai/_bundle/assets/backing-services/java/http_schema_failure.java +43 -0
- slipwai/_bundle/assets/backing-services/java/migrate_main.java +103 -0
- slipwai/_bundle/assets/backing-services/java/oidc_keycloak.java +101 -0
- slipwai/_bundle/assets/backing-services/java/projection.java +34 -0
- slipwai/_bundle/assets/backing-services/java/projections.java +248 -0
- slipwai/_bundle/assets/backing-services/java/read_models.java +86 -0
- slipwai/_bundle/assets/backing-services/java/tag_query.java +70 -0
- slipwai/_bundle/assets/backing-services/java/tagged_read.java +17 -0
- slipwai/_bundle/assets/backing-services/java/tags_of.java +53 -0
- slipwai/_bundle/assets/backing-services/java/tests/checkpoint_store_contract.java +242 -0
- slipwai/_bundle/assets/backing-services/java/tests/checkpoint_store_memory_test.java +20 -0
- slipwai/_bundle/assets/backing-services/java/tests/checkpoint_store_sqlite_test.java +33 -0
- slipwai/_bundle/assets/backing-services/java/tests/database_url_test.java +79 -0
- slipwai/_bundle/assets/backing-services/java/tests/event_store_contract.java +715 -0
- slipwai/_bundle/assets/backing-services/java/tests/event_store_memory_test.java +19 -0
- slipwai/_bundle/assets/backing-services/java/tests/event_store_sqlite_test.java +89 -0
- slipwai/_bundle/assets/backing-services/java/tests/oidc_keycloak_test.java +73 -0
- slipwai/_bundle/assets/backing-services/java/tests/projections_test.java +302 -0
- slipwai/_bundle/assets/backing-services/java/tests/users_oidc_keycloak_test.java +135 -0
- slipwai/_bundle/assets/backing-services/java/transactions.java +96 -0
- slipwai/_bundle/assets/backing-services/java/users_oidc_keycloak.java +114 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/config_source_registration +1 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/database_url_config_source.java +85 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/http_flags_resource.java +40 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/http_health_check.java +37 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/http_not_found_mapper.java +36 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/jta_transactions.java +132 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/oidc_keycloak_augmentor.java +77 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/scheduled_projections.java +95 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/tests/checkpoint_store_postgres_it.java +142 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/tests/event_store_postgres_it.java +377 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/tests/http_app_test.java +90 -0
- slipwai/_bundle/assets/backing-services/java-quarkus/users_current_customer.java +79 -0
- slipwai/_bundle/assets/backing-services/java-spring/database_url_environment_post_processor.java +82 -0
- slipwai/_bundle/assets/backing-services/java-spring/environment_post_processor_registration +3 -0
- slipwai/_bundle/assets/backing-services/java-spring/http_flags_controller.java +40 -0
- slipwai/_bundle/assets/backing-services/java-spring/http_health_indicator.java +43 -0
- slipwai/_bundle/assets/backing-services/java-spring/http_not_found_advice.java +43 -0
- slipwai/_bundle/assets/backing-services/java-spring/oidc_keycloak_security.java +126 -0
- slipwai/_bundle/assets/backing-services/java-spring/scheduled_projections.java +94 -0
- slipwai/_bundle/assets/backing-services/java-spring/spring_transactions.java +86 -0
- slipwai/_bundle/assets/backing-services/java-spring/tests/checkpoint_store_postgres_it.java +142 -0
- slipwai/_bundle/assets/backing-services/java-spring/tests/event_store_postgres_it.java +377 -0
- slipwai/_bundle/assets/backing-services/java-spring/tests/http_app_test.java +115 -0
- slipwai/_bundle/assets/backing-services/java-spring/users_security.java +143 -0
- slipwai/_bundle/assets/backing-services/keycloak/README.md +90 -0
- slipwai/_bundle/assets/backing-services/keycloak/realms/app.json +59 -0
- slipwai/_bundle/assets/backing-services/keycloak/realms/customers.json +83 -0
- slipwai/_bundle/assets/backing-services/prune.py +1508 -0
- slipwai/_bundle/assets/backing-services/python/checkpoint_store_memory.py +62 -0
- slipwai/_bundle/assets/backing-services/python/checkpoint_store_postgres.py +115 -0
- slipwai/_bundle/assets/backing-services/python/checkpoint_store_sqlite.py +109 -0
- slipwai/_bundle/assets/backing-services/python/event_store_memory.py +252 -0
- slipwai/_bundle/assets/backing-services/python/event_store_postgres.py +619 -0
- slipwai/_bundle/assets/backing-services/python/event_store_sqlite.py +515 -0
- slipwai/_bundle/assets/backing-services/python/events.py +405 -0
- slipwai/_bundle/assets/backing-services/python/http_app.py +329 -0
- slipwai/_bundle/assets/backing-services/python/logging_setup.py +80 -0
- slipwai/_bundle/assets/backing-services/python/main.py +92 -0
- slipwai/_bundle/assets/backing-services/python/migrations_apply.py +100 -0
- slipwai/_bundle/assets/backing-services/python/oidc_keycloak.py +86 -0
- slipwai/_bundle/assets/backing-services/python/openapi-flags.json +140 -0
- slipwai/_bundle/assets/backing-services/python/openapi.json +118 -0
- slipwai/_bundle/assets/backing-services/python/openapi_export.py +44 -0
- slipwai/_bundle/assets/backing-services/python/projections.py +228 -0
- slipwai/_bundle/assets/backing-services/python/projections_lifespan.py +125 -0
- slipwai/_bundle/assets/backing-services/python/read_models.py +133 -0
- slipwai/_bundle/assets/backing-services/python/settings.py +125 -0
- slipwai/_bundle/assets/backing-services/python/tests/checkpoint_store_contract.py +191 -0
- slipwai/_bundle/assets/backing-services/python/tests/conftest.py +16 -0
- slipwai/_bundle/assets/backing-services/python/tests/event_store_contract.py +627 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_checkpoint_store_memory.py +24 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_checkpoint_store_postgres.py +79 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_checkpoint_store_sqlite.py +25 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_event_store_memory.py +21 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_event_store_postgres.py +316 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_event_store_sqlite.py +113 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_http_app.py +255 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_logging_setup.py +70 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_oidc_keycloak.py +44 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_projections.py +298 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_projections_lifespan.py +146 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_settings.py +90 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_tracing.py +92 -0
- slipwai/_bundle/assets/backing-services/python/tests/test_users_oidc_keycloak.py +47 -0
- slipwai/_bundle/assets/backing-services/python/tracing.py +133 -0
- slipwai/_bundle/assets/backing-services/python/users_oidc_keycloak.py +96 -0
- slipwai/_bundle/assets/backing-services/sql/001_events.sql +29 -0
- slipwai/_bundle/assets/backing-services/sql/002_events_append_only.sql +30 -0
- slipwai/_bundle/assets/backing-services/sql/003_projection_checkpoints.sql +27 -0
- slipwai/_bundle/assets/backing-services/sql/004_event_tags.sql +30 -0
- slipwai/_bundle/assets/backing-services/typescript/checkpoint-store-memory.ts +46 -0
- slipwai/_bundle/assets/backing-services/typescript/checkpoint-store-postgres.ts +94 -0
- slipwai/_bundle/assets/backing-services/typescript/checkpoint-store-sqlite.ts +103 -0
- slipwai/_bundle/assets/backing-services/typescript/config.ts +92 -0
- slipwai/_bundle/assets/backing-services/typescript/event-store-memory.ts +208 -0
- slipwai/_bundle/assets/backing-services/typescript/event-store-postgres.ts +590 -0
- slipwai/_bundle/assets/backing-services/typescript/event-store-sqlite.ts +523 -0
- slipwai/_bundle/assets/backing-services/typescript/events.ts +334 -0
- slipwai/_bundle/assets/backing-services/typescript/http-app.ts +452 -0
- slipwai/_bundle/assets/backing-services/typescript/main.ts +63 -0
- slipwai/_bundle/assets/backing-services/typescript/migrations/001_events.js +39 -0
- slipwai/_bundle/assets/backing-services/typescript/migrations/002_events_append_only.js +46 -0
- slipwai/_bundle/assets/backing-services/typescript/migrations/003_projection_checkpoints.js +40 -0
- slipwai/_bundle/assets/backing-services/typescript/migrations/004_event_tags.js +42 -0
- slipwai/_bundle/assets/backing-services/typescript/oidc-keycloak.ts +82 -0
- slipwai/_bundle/assets/backing-services/typescript/openapi-export.ts +37 -0
- slipwai/_bundle/assets/backing-services/typescript/openapi-flags.json +113 -0
- slipwai/_bundle/assets/backing-services/typescript/openapi.json +94 -0
- slipwai/_bundle/assets/backing-services/typescript/projections-plugin.ts +95 -0
- slipwai/_bundle/assets/backing-services/typescript/projections.ts +223 -0
- slipwai/_bundle/assets/backing-services/typescript/read-models.ts +106 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/checkpoint-store-contract.ts +176 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/checkpoint-store-memory.test.ts +13 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/checkpoint-store-postgres.test.ts +87 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/checkpoint-store-sqlite.test.ts +16 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/event-store-contract.ts +555 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/event-store-memory.test.ts +11 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/event-store-postgres.test.ts +269 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/event-store-sqlite.test.ts +146 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/http-app.test.ts +528 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/oidc-keycloak.test.ts +46 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/projections-plugin.test.ts +105 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/projections.test.ts +290 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/tracing.test.ts +101 -0
- slipwai/_bundle/assets/backing-services/typescript/tests/users-oidc-keycloak.test.ts +50 -0
- slipwai/_bundle/assets/backing-services/typescript/tracing.ts +180 -0
- slipwai/_bundle/assets/backing-services/typescript/users-oidc-keycloak.ts +84 -0
- slipwai/_bundle/assets/backing-services/typescript/vitest.integration.config.ts +16 -0
- slipwai/_bundle/assets/frontends/react-vite/api-client/package.json +17 -0
- slipwai/_bundle/assets/frontends/react-vite/api-client/src/index.ts +90 -0
- slipwai/_bundle/assets/frontends/react-vite/app/index.html +12 -0
- slipwai/_bundle/assets/frontends/react-vite/app/package.json +33 -0
- slipwai/_bundle/assets/frontends/react-vite/app/src/App.tsx +86 -0
- slipwai/_bundle/assets/frontends/react-vite/app/src/main.tsx +46 -0
- slipwai/_bundle/assets/frontends/react-vite/app/src/styles/base.css +242 -0
- slipwai/_bundle/assets/frontends/react-vite/app/src/styles/tokens.css +75 -0
- slipwai/_bundle/assets/frontends/react-vite/app/tests/App.test.tsx +38 -0
- slipwai/_bundle/assets/frontends/react-vite/app/tests/setup.ts +10 -0
- slipwai/_bundle/assets/frontends/react-vite/app/tsconfig.json +26 -0
- slipwai/_bundle/assets/frontends/react-vite/app/vite.config.ts +70 -0
- slipwai/_bundle/assets/frontends/react-vite/app-flags-local/flags.test.ts +58 -0
- slipwai/_bundle/assets/frontends/react-vite/app-flags-local/flags.ts +87 -0
- slipwai/_bundle/assets/frontends/react-vite/app-flags-target/flags.test.ts +97 -0
- slipwai/_bundle/assets/frontends/react-vite/app-flags-target/flags.ts +108 -0
- slipwai/_bundle/assets/frontends/react-vite/app-route-client/Home.test.tsx +46 -0
- slipwai/_bundle/assets/frontends/react-vite/app-route-client/Home.tsx +97 -0
- slipwai/_bundle/assets/frontends/react-vite/app-route-plain/Home.test.tsx +50 -0
- slipwai/_bundle/assets/frontends/react-vite/app-route-plain/Home.tsx +111 -0
- slipwai/_bundle/assets/frontends/react-vite/features/users-keycloak/src/auth/Account.tsx +88 -0
- slipwai/_bundle/assets/frontends/react-vite/features/users-keycloak/src/auth/users.tsx +102 -0
- slipwai/_bundle/assets/frontends/react-vite/features/users-keycloak/tests/auth/Account.test.tsx +110 -0
- slipwai/_bundle/assets/frontends/react-vite/features/users-keycloak/tests/auth/users.test.ts +64 -0
- slipwai/_bundle/assets/frontends/react-vite/locks/frontend-only-users-keycloak.json +3175 -0
- slipwai/_bundle/assets/frontends/react-vite/locks/frontend-only.json +3139 -0
- slipwai/_bundle/assets/frontends/react-vite/locks/typescript-backend-fastify-postgres-users-keycloak.json +4820 -0
- slipwai/_bundle/assets/frontends/react-vite/locks/typescript-backend-fastify-postgres.json +4784 -0
- slipwai/_bundle/assets/frontends/react-vite/locks/typescript-backend-fastify-users-keycloak.json +4434 -0
- slipwai/_bundle/assets/frontends/react-vite/locks/typescript-backend-fastify.json +4398 -0
- slipwai/_bundle/assets/frontends/react-vite/locks/typescript-backend-postgres-users-keycloak.json +3623 -0
- slipwai/_bundle/assets/frontends/react-vite/locks/typescript-backend-postgres.json +3587 -0
- slipwai/_bundle/assets/frontends/react-vite/locks/typescript-backend-users-keycloak.json +3190 -0
- slipwai/_bundle/assets/frontends/react-vite/locks/typescript-backend.json +3154 -0
- slipwai/_bundle/assets/languages/go/app/.gremlins.yaml +44 -0
- slipwai/_bundle/assets/languages/go/app/application/README.md +21 -0
- slipwai/_bundle/assets/languages/go/app/domain/README.md +23 -0
- slipwai/_bundle/assets/languages/go/app/health/health.go +7 -0
- slipwai/_bundle/assets/languages/go/app/health/health_test.go +9 -0
- slipwai/_bundle/assets/languages/go/event-port/application/ports/events/events.go +18 -0
- slipwai/_bundle/assets/languages/go/event-port/application/ports/events/events_test.go +10 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/accept-child-id-remove-exercise.md +40 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/acl-stripe-payment-translation.md +64 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/aggregate-sizing-occasion.md +17 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/aggregate-vs-read-model.md +30 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/always-valid-occasion-invariants.md +85 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/branded-id-types.md +28 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/create-child-through-root.md +43 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/decider-pattern-order.md +110 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/describe-order-exhaustive-switch.md +50 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/discriminated-union-pledge-result.md +54 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/domain-behavioral-tests.md +40 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/domain-service-pledge-contribution.md +139 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/domain-service-test-pledge-contribution.md +86 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/domain-service-vs-use-case.md +162 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/entity-rename-occasion.md +37 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/error-propagation-through-layers.md +92 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/exception-vs-result-type.md +37 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/explicit-return-pledge-no-events.md +85 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/fake-vs-mock-repository.md +59 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/in-process-event-dispatch.md +127 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/integration-test-order-repository.md +23 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/invariant-driven-vending-machine.md +53 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/money-value-object-factory.md +43 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/multiple-error-reasons-union.md +28 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/naming-signature-domain-vs-use-case.md +69 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/occasion-repository-interface.md +24 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/one-aggregate-per-transaction.md +63 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/optimistic-locking-repository-save.md +38 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/optimistic-locking-version-field.md +11 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/order-lifecycle-union.md +50 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/outbox-pattern-dispatch.md +114 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/pledge-result-types.md +80 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/process-manager-gift-purchase.md +140 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/property-based-test-pledge-budget.md +35 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/purity-test-domain-vs-presentation.md +52 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/readonly-array-child-collection.md +20 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/shared-kernel-package-layout.md +6 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/specification-can-pledge.md +75 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/test-decide-order-events.md +86 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/test-error-funding-closed.md +54 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/test-factory-get-occasion.md +99 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/ubiquitous-language-glossary-types.md +46 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/use-case-test-pledge-contribution.md +206 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/wrong-catch-rethrow-context.md +15 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/wrong-exception-for-business-rule.md +18 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/wrong-generic-error-type.md +13 -0
- slipwai/_bundle/assets/languages/go/examples/domain-driven-design/zod-branded-type-bridging.md +153 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/account-decider-and-evolve.md +272 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/balance-view-apply-fold.md +116 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/balance-view-projection.md +97 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/catch-up-checkpoint-transaction.md +70 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/command-handler-loop.md +53 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/command-handler-retry-loop.md +71 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/decide-withdraw-example.md +34 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/decider-behaviour-tests.md +83 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/decider-insufficient-funds-test.md +74 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/decider-type.md +22 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/decision-result-type.md +21 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/deposit-money-command-with-timestamp.md +13 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/event-envelope-type.md +59 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/event-store-port-interface.md +32 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/event-store-port.md +32 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/evolve-behaviour-via-withdraw-limit.md +38 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/generic-rehydrate-fold.md +20 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/idempotent-projection-dedupe.md +48 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/in-memory-event-store-fake.md +101 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/inline-view-in-append-transaction.md +86 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/live-view-bounded-fold.md +60 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/order-placed-upcaster.md +50 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/projection-behaviour-tests.md +65 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/rehydrate-left-fold.md +17 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/tags-of-from-identifying-attributes.md +56 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/todo-list-claiming.md +62 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/tolerant-reader-read-path.md +25 -0
- slipwai/_bundle/assets/languages/go/examples/event-sourcing/upcaster-behaviour-test.md +29 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/adapter-error-translation.md +46 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/antipattern-business-logic-in-adapter.md +23 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/antipattern-bypass-adapter.md +23 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/antipattern-domain-depends-on-infrastructure.md +18 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/antipattern-pattern-shaped-names.md +39 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/antipattern-technology-shaped-port.md +13 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/composition-root-http-entrypoint.md +50 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/composition-root-queue-entrypoint.md +29 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/cqrs-lite-dashboard-query-function.md +68 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/cqrs-lite-domain-transform-read-data.md +36 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/cross-cutting-auth-driving-adapter.md +40 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/cross-cutting-domain-authorization.md +27 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/cross-cutting-domain-probe-port.md +51 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/cross-cutting-error-formatting-http.md +35 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/cross-cutting-technical-telemetry-adapters.md +52 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/cross-cutting-transactional-persistence-port.md +86 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/cross-cutting-use-case-identity.md +25 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/dependency-injection-order-placement.md +140 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/driven-adapter-and-fake-implementation.md +69 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/greenfield-driven-port-fake.md +25 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/greenfield-driving-port-constant.md +38 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/incremental-after-thin-entrypoint.md +79 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/incremental-before-tangled-handler.md +77 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/incremental-create-adapter.md +65 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/incremental-create-use-case.md +77 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/incremental-extract-domain-function.md +40 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/incremental-extract-port-interface.md +28 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/port-interface-definitions.md +63 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/reads-vs-writes-query-function-example.md +42 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/testing-create-test-db-helper.md +22 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/testing-domain-unit-test-example.md +13 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/testing-fake-order-repo.md +31 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/testing-narrow-integration-tests.md +39 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/testing-recording-fake-instrumentation.md +46 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/testing-use-case-primary-boundary.md +44 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/worked-example-domain-function-record-pledge.md +59 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/worked-example-domain-types.md +76 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/worked-example-domain-unit-test.md +47 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/worked-example-driven-adapters.md +110 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/worked-example-driving-adapter-entrypoint.md +143 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/worked-example-fakes-for-testing.md +92 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/worked-example-port-interfaces.md +71 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/worked-example-use-case-orchestration.md +52 -0
- slipwai/_bundle/assets/languages/go/examples/hexagonal-architecture/worked-example-use-case-test.md +187 -0
- slipwai/_bundle/assets/languages/go/examples/testing/correct-complete-factory-object.md +9 -0
- slipwai/_bundle/assets/languages/go/examples/testing/correct-fresh-state-per-test.md +15 -0
- slipwai/_bundle/assets/languages/go/examples/testing/correct-import-real-schema.md +12 -0
- slipwai/_bundle/assets/languages/go/examples/testing/correct-inline-tested-through-behavior.md +33 -0
- slipwai/_bundle/assets/languages/go/examples/testing/correct-testing-behavior-public-api.md +48 -0
- slipwai/_bundle/assets/languages/go/examples/testing/coverage-theater-assert-called-only-correct.md +14 -0
- slipwai/_bundle/assets/languages/go/examples/testing/coverage-theater-assert-called-only-wrong.md +11 -0
- slipwai/_bundle/assets/languages/go/examples/testing/coverage-theater-branch-coverage-correct.md +24 -0
- slipwai/_bundle/assets/languages/go/examples/testing/coverage-theater-happy-path-only-wrong.md +11 -0
- slipwai/_bundle/assets/languages/go/examples/testing/coverage-theater-mock-function-under-test-correct.md +14 -0
- slipwai/_bundle/assets/languages/go/examples/testing/coverage-theater-mock-function-under-test-wrong.md +11 -0
- slipwai/_bundle/assets/languages/go/examples/testing/coverage-theater-trivial-getter-setter-correct.md +9 -0
- slipwai/_bundle/assets/languages/go/examples/testing/coverage-theater-trivial-getter-setter-wrong.md +11 -0
- slipwai/_bundle/assets/languages/go/examples/testing/factory-basic-pattern.md +24 -0
- slipwai/_bundle/assets/languages/go/examples/testing/factory-complete-example.md +22 -0
- slipwai/_bundle/assets/languages/go/examples/testing/factory-composition.md +38 -0
- slipwai/_bundle/assets/languages/go/examples/testing/reach-validation-through-behavior.md +46 -0
- slipwai/_bundle/assets/languages/go/examples/testing/wrong-extracted-helper-with-own-test.md +19 -0
- slipwai/_bundle/assets/languages/go/examples/testing/wrong-incomplete-factory-object.md +6 -0
- slipwai/_bundle/assets/languages/go/examples/testing/wrong-redefine-schema-in-test.md +12 -0
- slipwai/_bundle/assets/languages/go/examples/testing/wrong-shared-mutable-fixture.md +14 -0
- slipwai/_bundle/assets/languages/go/examples/testing/wrong-testing-implementation-detail.md +32 -0
- slipwai/_bundle/assets/languages/go/flags/flags/flags.go +202 -0
- slipwai/_bundle/assets/languages/go/flags/flags/flags_test.go +146 -0
- slipwai/_bundle/assets/languages/go/modules/base/go.mod +48 -0
- slipwai/_bundle/assets/languages/go/modules/base/go.sum +75 -0
- slipwai/_bundle/assets/languages/go/modules/postgres/go.mod +46 -0
- slipwai/_bundle/assets/languages/go/modules/postgres/go.sum +90 -0
- slipwai/_bundle/assets/languages/go/modules/sqlite/go.mod +50 -0
- slipwai/_bundle/assets/languages/go/modules/sqlite/go.sum +115 -0
- slipwai/_bundle/assets/languages/go/scripts/go-coverage.py +135 -0
- slipwai/_bundle/assets/languages/go/scripts/go-mutation.py +183 -0
- slipwai/_bundle/assets/languages/java/build/.gitattributes +6 -0
- slipwai/_bundle/assets/languages/java/build/.mvn/wrapper/maven-wrapper.properties +3 -0
- slipwai/_bundle/assets/languages/java/build/config/checkstyle.xml +57 -0
- slipwai/_bundle/assets/languages/java/build/config/pmd-ruleset.xml +23 -0
- slipwai/_bundle/assets/languages/java/build/config/spotbugs-exclude.xml +10 -0
- slipwai/_bundle/assets/languages/java/build/mvnw +295 -0
- slipwai/_bundle/assets/languages/java/build/mvnw.cmd +189 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/accept-child-id-remove-exercise.md +17 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/acl-stripe-payment-translation.md +27 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/aggregate-sizing-occasion.md +16 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/aggregate-vs-read-model.md +18 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/always-valid-occasion-invariants.md +53 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/branded-id-types.md +26 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/create-child-through-root.md +15 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/decider-pattern-order.md +53 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/describe-order-exhaustive-switch.md +16 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/discriminated-union-pledge-result.md +25 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/domain-behavioral-tests.md +20 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/domain-service-pledge-contribution.md +31 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/domain-service-test-pledge-contribution.md +13 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/domain-service-vs-use-case.md +53 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/entity-rename-occasion.md +12 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/error-propagation-through-layers.md +43 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/exception-vs-result-type.md +21 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/explicit-return-pledge-no-events.md +29 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/fake-vs-mock-repository.md +29 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/in-process-event-dispatch.md +40 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/integration-test-order-repository.md +24 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/invariant-driven-vending-machine.md +36 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/money-value-object-factory.md +50 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/multiple-error-reasons-union.md +15 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/naming-signature-domain-vs-use-case.md +11 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/occasion-repository-interface.md +14 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/one-aggregate-per-transaction.md +30 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/optimistic-locking-repository-save.md +28 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/optimistic-locking-version-field.md +10 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/order-lifecycle-union.md +25 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/outbox-pattern-dispatch.md +42 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/pledge-result-types.md +21 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/process-manager-gift-purchase.md +78 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/property-based-test-pledge-budget.md +29 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/purity-test-domain-vs-presentation.md +22 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/readonly-array-child-collection.md +15 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/shared-kernel-package-layout.md +16 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/specification-can-pledge.md +22 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/test-decide-order-events.md +22 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/test-error-funding-closed.md +15 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/test-factory-get-occasion.md +16 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/ubiquitous-language-glossary-types.md +15 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/use-case-test-pledge-contribution.md +19 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/wrong-catch-rethrow-context.md +12 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/wrong-exception-for-business-rule.md +10 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/wrong-generic-error-type.md +7 -0
- slipwai/_bundle/assets/languages/java/examples/domain-driven-design/zod-branded-type-bridging.md +38 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/account-decider-and-evolve.md +135 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/balance-view-apply-fold.md +18 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/balance-view-projection.md +61 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/catch-up-checkpoint-transaction.md +29 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/command-handler-loop.md +24 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/command-handler-retry-loop.md +39 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/decide-withdraw-example.md +18 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/decider-behaviour-tests.md +47 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/decider-insufficient-funds-test.md +21 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/decider-type.md +21 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/decision-result-type.md +24 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/deposit-money-command-with-timestamp.md +7 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/event-envelope-type.md +40 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/event-store-port-interface.md +25 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/event-store-port.md +19 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/evolve-behaviour-via-withdraw-limit.md +13 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/generic-rehydrate-fold.md +13 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/idempotent-projection-dedupe.md +24 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/in-memory-event-store-fake.md +53 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/inline-view-in-append-transaction.md +72 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/live-view-bounded-fold.md +54 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/order-placed-upcaster.md +32 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/projection-behaviour-tests.md +34 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/rehydrate-left-fold.md +9 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/tags-of-from-identifying-attributes.md +61 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/todo-list-claiming.md +53 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/tolerant-reader-read-path.md +33 -0
- slipwai/_bundle/assets/languages/java/examples/event-sourcing/upcaster-behaviour-test.md +11 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/adapter-error-translation.md +34 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/antipattern-business-logic-in-adapter.md +19 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/antipattern-bypass-adapter.md +27 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/antipattern-domain-depends-on-infrastructure.md +13 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/antipattern-pattern-shaped-names.md +19 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/antipattern-technology-shaped-port.md +15 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/composition-root-http-entrypoint.md +51 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/composition-root-queue-entrypoint.md +27 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/cqrs-lite-dashboard-query-function.md +23 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/cqrs-lite-domain-transform-read-data.md +16 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/cross-cutting-auth-driving-adapter.md +30 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/cross-cutting-domain-authorization.md +15 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/cross-cutting-domain-probe-port.md +48 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/cross-cutting-error-formatting-http.md +26 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/cross-cutting-technical-telemetry-adapters.md +26 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/cross-cutting-transactional-persistence-port.md +35 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/cross-cutting-use-case-identity.md +20 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/dependency-injection-order-placement.md +61 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/driven-adapter-and-fake-implementation.md +53 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/greenfield-driven-port-fake.md +30 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/greenfield-driving-port-constant.md +14 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/incremental-after-thin-entrypoint.md +39 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/incremental-before-tangled-handler.md +37 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/incremental-create-adapter.md +45 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/incremental-create-use-case.md +30 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/incremental-extract-domain-function.md +21 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/incremental-extract-port-interface.md +14 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/port-interface-definitions.md +43 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/reads-vs-writes-query-function-example.md +23 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/testing-create-test-db-helper.md +15 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/testing-domain-unit-test-example.md +8 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/testing-fake-order-repo.md +27 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/testing-narrow-integration-tests.md +42 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/testing-recording-fake-instrumentation.md +41 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/testing-use-case-primary-boundary.md +27 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/worked-example-domain-function-record-pledge.md +32 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/worked-example-domain-types.md +63 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/worked-example-domain-unit-test.md +18 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/worked-example-driven-adapters.md +45 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/worked-example-driving-adapter-entrypoint.md +44 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/worked-example-fakes-for-testing.md +62 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/worked-example-port-interfaces.md +56 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/worked-example-use-case-orchestration.md +46 -0
- slipwai/_bundle/assets/languages/java/examples/hexagonal-architecture/worked-example-use-case-test.md +68 -0
- slipwai/_bundle/assets/languages/java/examples/testing/correct-complete-factory-object.md +13 -0
- slipwai/_bundle/assets/languages/java/examples/testing/correct-fresh-state-per-test.md +13 -0
- slipwai/_bundle/assets/languages/java/examples/testing/correct-import-real-schema.md +13 -0
- slipwai/_bundle/assets/languages/java/examples/testing/correct-inline-tested-through-behavior.md +18 -0
- slipwai/_bundle/assets/languages/java/examples/testing/correct-testing-behavior-public-api.md +25 -0
- slipwai/_bundle/assets/languages/java/examples/testing/coverage-theater-assert-called-only-correct.md +9 -0
- slipwai/_bundle/assets/languages/java/examples/testing/coverage-theater-assert-called-only-wrong.md +10 -0
- slipwai/_bundle/assets/languages/java/examples/testing/coverage-theater-branch-coverage-correct.md +21 -0
- slipwai/_bundle/assets/languages/java/examples/testing/coverage-theater-happy-path-only-wrong.md +7 -0
- slipwai/_bundle/assets/languages/java/examples/testing/coverage-theater-mock-function-under-test-correct.md +8 -0
- slipwai/_bundle/assets/languages/java/examples/testing/coverage-theater-mock-function-under-test-wrong.md +10 -0
- slipwai/_bundle/assets/languages/java/examples/testing/coverage-theater-trivial-getter-setter-correct.md +8 -0
- slipwai/_bundle/assets/languages/java/examples/testing/coverage-theater-trivial-getter-setter-wrong.md +8 -0
- slipwai/_bundle/assets/languages/java/examples/testing/factory-basic-pattern.md +16 -0
- slipwai/_bundle/assets/languages/java/examples/testing/factory-complete-example.md +17 -0
- slipwai/_bundle/assets/languages/java/examples/testing/factory-composition.md +24 -0
- slipwai/_bundle/assets/languages/java/examples/testing/reach-validation-through-behavior.md +25 -0
- slipwai/_bundle/assets/languages/java/examples/testing/wrong-extracted-helper-with-own-test.md +15 -0
- slipwai/_bundle/assets/languages/java/examples/testing/wrong-incomplete-factory-object.md +7 -0
- slipwai/_bundle/assets/languages/java/examples/testing/wrong-redefine-schema-in-test.md +9 -0
- slipwai/_bundle/assets/languages/java/examples/testing/wrong-shared-mutable-fixture.md +14 -0
- slipwai/_bundle/assets/languages/java/examples/testing/wrong-testing-implementation-detail.md +26 -0
- slipwai/_bundle/assets/languages/java/flags/src/main/java/com/example/deliverystarter/flags/Flags.java +242 -0
- slipwai/_bundle/assets/languages/java/flags/src/test/java/com/example/deliverystarter/flags/FlagsTest.java +116 -0
- slipwai/_bundle/assets/languages/java-quarkus/app/pom.xml +428 -0
- slipwai/_bundle/assets/languages/java-quarkus/app/src/main/java/com/example/deliverystarter/application/README.md +20 -0
- slipwai/_bundle/assets/languages/java-quarkus/app/src/main/java/com/example/deliverystarter/domain/README.md +24 -0
- slipwai/_bundle/assets/languages/java-quarkus/app/src/main/java/com/example/deliverystarter/health/HealthStatus.java +18 -0
- slipwai/_bundle/assets/languages/java-quarkus/app/src/main/resources/application.properties +157 -0
- slipwai/_bundle/assets/languages/java-quarkus/app/src/test/java/com/example/deliverystarter/health/HealthStatusTest.java +21 -0
- slipwai/_bundle/assets/languages/java-spring/app/pom.xml +535 -0
- slipwai/_bundle/assets/languages/java-spring/app/src/main/java/com/example/deliverystarter/ServiceApplication.java +28 -0
- slipwai/_bundle/assets/languages/java-spring/app/src/main/java/com/example/deliverystarter/application/README.md +20 -0
- slipwai/_bundle/assets/languages/java-spring/app/src/main/java/com/example/deliverystarter/domain/README.md +23 -0
- slipwai/_bundle/assets/languages/java-spring/app/src/main/java/com/example/deliverystarter/health/HealthStatus.java +18 -0
- slipwai/_bundle/assets/languages/java-spring/app/src/main/resources/application.properties +158 -0
- slipwai/_bundle/assets/languages/java-spring/app/src/test/java/com/example/deliverystarter/health/HealthStatusTest.java +21 -0
- slipwai/_bundle/assets/languages/python/app/pyproject.toml +50 -0
- slipwai/_bundle/assets/languages/python/app/src/delivery_starter/__init__.py +9 -0
- slipwai/_bundle/assets/languages/python/app/src/delivery_starter/application/README.md +21 -0
- slipwai/_bundle/assets/languages/python/app/src/delivery_starter/domain/README.md +23 -0
- slipwai/_bundle/assets/languages/python/app/tests/test_health.py +5 -0
- slipwai/_bundle/assets/languages/python/event-port/src/delivery_starter/application/ports/events.py +27 -0
- slipwai/_bundle/assets/languages/python/event-port/tests/test_events.py +5 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/accept-child-id-remove-exercise.md +35 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/acl-stripe-payment-translation.md +67 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/aggregate-sizing-occasion.md +19 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/aggregate-vs-read-model.md +31 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/always-valid-occasion-invariants.md +69 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/branded-id-types.md +24 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/create-child-through-root.md +33 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/decider-pattern-order.md +121 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/describe-order-exhaustive-switch.md +56 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/discriminated-union-pledge-result.md +38 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/domain-behavioral-tests.md +16 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/domain-service-pledge-contribution.md +135 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/domain-service-test-pledge-contribution.md +113 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/domain-service-vs-use-case.md +181 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/entity-rename-occasion.md +35 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/error-propagation-through-layers.md +70 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/exception-vs-result-type.md +34 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/explicit-return-pledge-no-events.md +89 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/fake-vs-mock-repository.md +46 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/in-process-event-dispatch.md +129 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/integration-test-order-repository.md +12 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/invariant-driven-vending-machine.md +46 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/money-value-object-factory.md +29 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/multiple-error-reasons-union.md +23 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/naming-signature-domain-vs-use-case.md +86 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/occasion-repository-interface.md +25 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/one-aggregate-per-transaction.md +68 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/optimistic-locking-repository-save.md +23 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/optimistic-locking-version-field.md +12 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/order-lifecycle-union.md +38 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/outbox-pattern-dispatch.md +123 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/pledge-result-types.md +62 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/process-manager-gift-purchase.md +154 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/property-based-test-pledge-budget.md +28 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/purity-test-domain-vs-presentation.md +32 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/readonly-array-child-collection.md +10 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/shared-kernel-package-layout.md +8 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/specification-can-pledge.md +66 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/test-decide-order-events.md +82 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/test-error-funding-closed.md +23 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/test-factory-get-occasion.md +70 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/ubiquitous-language-glossary-types.md +36 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/use-case-test-pledge-contribution.md +216 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/wrong-catch-rethrow-context.md +8 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/wrong-exception-for-business-rule.md +11 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/wrong-generic-error-type.md +21 -0
- slipwai/_bundle/assets/languages/python/examples/domain-driven-design/zod-branded-type-bridging.md +101 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/account-decider-and-evolve.md +193 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/balance-view-apply-fold.md +98 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/balance-view-projection.md +98 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/catch-up-checkpoint-transaction.md +42 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/command-handler-loop.md +49 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/command-handler-retry-loop.md +50 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/decide-withdraw-example.md +19 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/decider-behaviour-tests.md +45 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/decider-insufficient-funds-test.md +36 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/decider-type.md +18 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/decision-result-type.md +30 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/deposit-money-command-with-timestamp.md +12 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/event-envelope-type.md +36 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/event-store-port-interface.md +33 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/event-store-port.md +32 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/evolve-behaviour-via-withdraw-limit.md +13 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/generic-rehydrate-fold.md +14 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/idempotent-projection-dedupe.md +37 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/in-memory-event-store-fake.md +51 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/inline-view-in-append-transaction.md +67 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/live-view-bounded-fold.md +50 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/order-placed-upcaster.md +56 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/projection-behaviour-tests.md +41 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/rehydrate-left-fold.md +8 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/tags-of-from-identifying-attributes.md +50 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/todo-list-claiming.md +60 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/tolerant-reader-read-path.md +19 -0
- slipwai/_bundle/assets/languages/python/examples/event-sourcing/upcaster-behaviour-test.md +14 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/adapter-error-translation.md +39 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/antipattern-business-logic-in-adapter.md +32 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/antipattern-bypass-adapter.md +14 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/antipattern-domain-depends-on-infrastructure.md +16 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/antipattern-pattern-shaped-names.md +27 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/antipattern-technology-shaped-port.md +15 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/composition-root-http-entrypoint.md +41 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/composition-root-queue-entrypoint.md +15 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/cqrs-lite-dashboard-query-function.md +42 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/cqrs-lite-domain-transform-read-data.md +34 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/cross-cutting-auth-driving-adapter.md +38 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/cross-cutting-domain-authorization.md +10 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/cross-cutting-domain-probe-port.md +44 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/cross-cutting-error-formatting-http.md +20 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/cross-cutting-technical-telemetry-adapters.md +45 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/cross-cutting-transactional-persistence-port.md +91 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/cross-cutting-use-case-identity.md +21 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/dependency-injection-order-placement.md +120 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/driven-adapter-and-fake-implementation.md +36 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/greenfield-driven-port-fake.md +24 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/greenfield-driving-port-constant.md +15 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/incremental-after-thin-entrypoint.md +59 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/incremental-before-tangled-handler.md +48 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/incremental-create-adapter.md +24 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/incremental-create-use-case.md +52 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/incremental-extract-domain-function.md +36 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/incremental-extract-port-interface.md +16 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/port-interface-definitions.md +69 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/reads-vs-writes-query-function-example.md +36 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/testing-create-test-db-helper.md +11 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/testing-domain-unit-test-example.md +10 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/testing-fake-order-repo.md +16 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/testing-narrow-integration-tests.md +26 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/testing-recording-fake-instrumentation.md +37 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/testing-use-case-primary-boundary.md +27 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/worked-example-domain-function-record-pledge.md +70 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/worked-example-domain-types.md +65 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/worked-example-domain-unit-test.md +38 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/worked-example-driven-adapters.md +128 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/worked-example-driving-adapter-entrypoint.md +102 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/worked-example-fakes-for-testing.md +62 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/worked-example-port-interfaces.md +77 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/worked-example-use-case-orchestration.md +53 -0
- slipwai/_bundle/assets/languages/python/examples/hexagonal-architecture/worked-example-use-case-test.md +164 -0
- slipwai/_bundle/assets/languages/python/examples/testing/correct-complete-factory-object.md +10 -0
- slipwai/_bundle/assets/languages/python/examples/testing/correct-fresh-state-per-test.md +10 -0
- slipwai/_bundle/assets/languages/python/examples/testing/correct-import-real-schema.md +8 -0
- slipwai/_bundle/assets/languages/python/examples/testing/correct-inline-tested-through-behavior.md +15 -0
- slipwai/_bundle/assets/languages/python/examples/testing/correct-testing-behavior-public-api.md +21 -0
- slipwai/_bundle/assets/languages/python/examples/testing/coverage-theater-assert-called-only-correct.md +7 -0
- slipwai/_bundle/assets/languages/python/examples/testing/coverage-theater-assert-called-only-wrong.md +9 -0
- slipwai/_bundle/assets/languages/python/examples/testing/coverage-theater-branch-coverage-correct.md +17 -0
- slipwai/_bundle/assets/languages/python/examples/testing/coverage-theater-happy-path-only-wrong.md +8 -0
- slipwai/_bundle/assets/languages/python/examples/testing/coverage-theater-mock-function-under-test-correct.md +7 -0
- slipwai/_bundle/assets/languages/python/examples/testing/coverage-theater-mock-function-under-test-wrong.md +9 -0
- slipwai/_bundle/assets/languages/python/examples/testing/coverage-theater-trivial-getter-setter-correct.md +5 -0
- slipwai/_bundle/assets/languages/python/examples/testing/coverage-theater-trivial-getter-setter-wrong.md +5 -0
- slipwai/_bundle/assets/languages/python/examples/testing/factory-basic-pattern.md +23 -0
- slipwai/_bundle/assets/languages/python/examples/testing/factory-complete-example.md +17 -0
- slipwai/_bundle/assets/languages/python/examples/testing/factory-composition.md +24 -0
- slipwai/_bundle/assets/languages/python/examples/testing/reach-validation-through-behavior.md +27 -0
- slipwai/_bundle/assets/languages/python/examples/testing/wrong-extracted-helper-with-own-test.md +12 -0
- slipwai/_bundle/assets/languages/python/examples/testing/wrong-incomplete-factory-object.md +5 -0
- slipwai/_bundle/assets/languages/python/examples/testing/wrong-redefine-schema-in-test.md +11 -0
- slipwai/_bundle/assets/languages/python/examples/testing/wrong-shared-mutable-fixture.md +12 -0
- slipwai/_bundle/assets/languages/python/examples/testing/wrong-testing-implementation-detail.md +22 -0
- slipwai/_bundle/assets/languages/python/flags/src/delivery_starter/flags.py +179 -0
- slipwai/_bundle/assets/languages/python/flags/tests/test_flags.py +90 -0
- slipwai/_bundle/assets/languages/python/locks/uv-fastapi-postgres.lock +1200 -0
- slipwai/_bundle/assets/languages/python/locks/uv-fastapi.lock +1120 -0
- slipwai/_bundle/assets/languages/python/locks/uv-postgres.lock +463 -0
- slipwai/_bundle/assets/languages/python/locks/uv.lock +381 -0
- slipwai/_bundle/assets/languages/typescript/app/package.json +19 -0
- slipwai/_bundle/assets/languages/typescript/app/src/application/README.md +21 -0
- slipwai/_bundle/assets/languages/typescript/app/src/domain/README.md +23 -0
- slipwai/_bundle/assets/languages/typescript/app/src/health.ts +5 -0
- slipwai/_bundle/assets/languages/typescript/app/tests/health.test.ts +9 -0
- slipwai/_bundle/assets/languages/typescript/biome/biome.jsonc +96 -0
- slipwai/_bundle/assets/languages/typescript/biome/domain-purity.grit +43 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/accept-child-id-remove-exercise.md +14 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/acl-stripe-payment-translation.md +26 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/aggregate-sizing-occasion.md +15 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/aggregate-vs-read-model.md +25 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/always-valid-occasion-invariants.md +51 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/branded-id-types.md +9 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/create-child-through-root.md +21 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/decider-pattern-order.md +45 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/describe-order-exhaustive-switch.md +10 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/discriminated-union-pledge-result.md +9 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/domain-behavioral-tests.md +17 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/domain-service-pledge-contribution.md +54 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/domain-service-test-pledge-contribution.md +13 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/domain-service-vs-use-case.md +81 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/entity-rename-occasion.md +16 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/error-propagation-through-layers.md +38 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/exception-vs-result-type.md +16 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/explicit-return-pledge-no-events.md +42 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/fake-vs-mock-repository.md +13 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/in-process-event-dispatch.md +37 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/integration-test-order-repository.md +12 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/invariant-driven-vending-machine.md +29 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/money-value-object-factory.md +14 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/multiple-error-reasons-union.md +11 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/naming-signature-domain-vs-use-case.md +11 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/occasion-repository-interface.md +10 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/one-aggregate-per-transaction.md +24 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/optimistic-locking-repository-save.md +8 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/optimistic-locking-version-field.md +9 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/order-lifecycle-union.md +6 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/outbox-pattern-dispatch.md +34 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/pledge-result-types.md +9 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/process-manager-gift-purchase.md +82 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/property-based-test-pledge-budget.md +25 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/purity-test-domain-vs-presentation.md +17 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/readonly-array-child-collection.md +7 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/shared-kernel-package-layout.md +6 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/specification-can-pledge.md +19 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/test-decide-order-events.md +18 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/test-error-funding-closed.md +16 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/test-factory-get-occasion.md +12 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/ubiquitous-language-glossary-types.md +13 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/use-case-test-pledge-contribution.md +21 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/wrong-catch-rethrow-context.md +4 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/wrong-exception-for-business-rule.md +7 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/wrong-generic-error-type.md +5 -0
- slipwai/_bundle/assets/languages/typescript/examples/domain-driven-design/zod-branded-type-bridging.md +19 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/account-decider-and-evolve.md +91 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/balance-view-apply-fold.md +74 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/balance-view-projection.md +58 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/catch-up-checkpoint-transaction.md +14 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/command-handler-loop.md +24 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/command-handler-retry-loop.md +22 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/decide-withdraw-example.md +13 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/decider-behaviour-tests.md +32 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/decider-insufficient-funds-test.md +25 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/decider-type.md +8 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/decision-result-type.md +8 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/deposit-money-command-with-timestamp.md +3 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/event-envelope-type.md +22 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/event-store-port-interface.md +17 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/event-store-port.md +13 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/evolve-behaviour-via-withdraw-limit.md +9 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/generic-rehydrate-fold.md +6 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/idempotent-projection-dedupe.md +24 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/in-memory-event-store-fake.md +41 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/inline-view-in-append-transaction.md +60 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/live-view-bounded-fold.md +48 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/order-placed-upcaster.md +29 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/projection-behaviour-tests.md +32 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/rehydrate-left-fold.md +4 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/tags-of-from-identifying-attributes.md +56 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/todo-list-claiming.md +55 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/tolerant-reader-read-path.md +10 -0
- slipwai/_bundle/assets/languages/typescript/examples/event-sourcing/upcaster-behaviour-test.md +14 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/adapter-error-translation.md +20 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/antipattern-business-logic-in-adapter.md +14 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/antipattern-bypass-adapter.md +10 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/antipattern-domain-depends-on-infrastructure.md +10 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/antipattern-pattern-shaped-names.md +15 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/antipattern-technology-shaped-port.md +13 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/composition-root-http-entrypoint.md +29 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/composition-root-queue-entrypoint.md +15 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/cqrs-lite-dashboard-query-function.md +17 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/cqrs-lite-domain-transform-read-data.md +10 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/cross-cutting-auth-driving-adapter.md +25 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/cross-cutting-domain-authorization.md +9 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/cross-cutting-domain-probe-port.md +23 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/cross-cutting-error-formatting-http.md +18 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/cross-cutting-technical-telemetry-adapters.md +31 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/cross-cutting-transactional-persistence-port.md +34 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/cross-cutting-use-case-identity.md +11 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/dependency-injection-order-placement.md +91 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/driven-adapter-and-fake-implementation.md +21 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/greenfield-driven-port-fake.md +10 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/greenfield-driving-port-constant.md +12 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/incremental-after-thin-entrypoint.md +31 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/incremental-before-tangled-handler.md +28 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/incremental-create-adapter.md +16 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/incremental-create-use-case.md +31 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/incremental-extract-domain-function.md +28 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/incremental-extract-port-interface.md +9 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/port-interface-definitions.md +39 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/reads-vs-writes-query-function-example.md +12 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/testing-create-test-db-helper.md +8 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/testing-domain-unit-test-example.md +6 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/testing-fake-order-repo.md +11 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/testing-narrow-integration-tests.md +23 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/testing-recording-fake-instrumentation.md +29 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/testing-use-case-primary-boundary.md +25 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/worked-example-domain-function-record-pledge.md +59 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/worked-example-domain-types.md +37 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/worked-example-domain-unit-test.md +23 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/worked-example-driven-adapters.md +33 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/worked-example-driving-adapter-entrypoint.md +56 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/worked-example-fakes-for-testing.md +39 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/worked-example-port-interfaces.md +42 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/worked-example-use-case-orchestration.md +36 -0
- slipwai/_bundle/assets/languages/typescript/examples/hexagonal-architecture/worked-example-use-case-test.md +128 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/correct-complete-factory-object.md +11 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/correct-fresh-state-per-test.md +11 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/correct-import-real-schema.md +12 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/correct-inline-tested-through-behavior.md +16 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/correct-testing-behavior-public-api.md +19 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/coverage-theater-assert-called-only-correct.md +7 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/coverage-theater-assert-called-only-wrong.md +7 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/coverage-theater-branch-coverage-correct.md +23 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/coverage-theater-happy-path-only-wrong.md +7 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/coverage-theater-mock-function-under-test-correct.md +7 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/coverage-theater-mock-function-under-test-wrong.md +7 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/coverage-theater-trivial-getter-setter-correct.md +6 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/coverage-theater-trivial-getter-setter-wrong.md +6 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/factory-basic-pattern.md +18 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/factory-complete-example.md +15 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/factory-composition.md +31 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/reach-validation-through-behavior.md +30 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/wrong-extracted-helper-with-own-test.md +10 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/wrong-incomplete-factory-object.md +5 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/wrong-redefine-schema-in-test.md +5 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/wrong-shared-mutable-fixture.md +11 -0
- slipwai/_bundle/assets/languages/typescript/examples/testing/wrong-testing-implementation-detail.md +20 -0
- slipwai/_bundle/assets/languages/typescript/flags/src/flags.ts +229 -0
- slipwai/_bundle/assets/languages/typescript/flags/tests/flags.test.ts +140 -0
- slipwai/_bundle/assets/languages/typescript/locks/package-lock-fastify-postgres.json +3471 -0
- slipwai/_bundle/assets/languages/typescript/locks/package-lock-fastify.json +3075 -0
- slipwai/_bundle/assets/languages/typescript/locks/package-lock-postgres.json +2233 -0
- slipwai/_bundle/assets/languages/typescript/locks/package-lock.json +1790 -0
- slipwai/_bundle/assets/profiles/event-modelling/.specify/presets/.registry +12 -0
- slipwai/_bundle/assets/profiles/event-modelling/.specify/presets/event-modelling/preset.yml +62 -0
- slipwai/_bundle/assets/profiles/event-modelling/.specify/presets/event-modelling/templates/constitution-template.md +494 -0
- slipwai/_bundle/assets/profiles/event-modelling/.specify/presets/event-modelling/templates/plan-template.md +252 -0
- slipwai/_bundle/assets/profiles/event-modelling/.specify/presets/event-modelling/templates/tasks-template.md +241 -0
- slipwai/_bundle/assets/profiles/event-modelling/commands/example-map.md +11 -0
- slipwai/_bundle/assets/profiles/event-modelling/commands/validate-code-against-model.md +11 -0
- slipwai/_bundle/assets/profiles/event-modelling/docs/speckit-preset.md +98 -0
- slipwai/_bundle/assets/profiles/standard/.specify/presets/.registry +12 -0
- slipwai/_bundle/assets/profiles/standard/.specify/presets/standard/preset.yml +58 -0
- slipwai/_bundle/assets/profiles/standard/.specify/presets/standard/templates/constitution-template.md +468 -0
- slipwai/_bundle/assets/profiles/standard/docs/adr/0001-record-architecture-decisions.md +41 -0
- slipwai/_bundle/assets/profiles/standard/docs/speckit-preset.md +108 -0
- slipwai/_bundle/assets/profiles/standard/skills/adversarial-testing/SKILL.md +62 -0
- slipwai/_bundle/assets/profiles/standard/skills/adversarial-testing/resources/attack-catalogue.md +67 -0
- slipwai/_bundle/assets/profiles/standard/skills/architecture-decisions/SKILL.md +79 -0
- slipwai/_bundle/assets/targets/aws/README.md +243 -0
- slipwai/_bundle/assets/targets/aws/bootstrap/main.tf +316 -0
- slipwai/_bundle/assets/targets/aws/bootstrap/outputs.tf +32 -0
- slipwai/_bundle/assets/targets/aws/bootstrap/variables.tf +64 -0
- slipwai/_bundle/assets/targets/aws/scripts/bootstrap.py +696 -0
- slipwai/_bundle/assets/targets/aws/scripts/check-flags.py +400 -0
- slipwai/_bundle/assets/targets/aws/scripts/deploy.py +1082 -0
- slipwai/_bundle/assets/targets/aws/service/auth0.tf +272 -0
- slipwai/_bundle/assets/targets/aws/service/cognito_customers.tf +110 -0
- slipwai/_bundle/assets/targets/aws/service/cognito_staff.tf +104 -0
- slipwai/_bundle/assets/targets/aws/service/flags.auto.tfvars +37 -0
- slipwai/_bundle/assets/targets/aws/service/flags.tf +226 -0
- slipwai/_bundle/assets/targets/aws/service/frontend.tf +153 -0
- slipwai/_bundle/assets/targets/aws/service/ingress.tf +198 -0
- slipwai/_bundle/assets/targets/aws/service/main.tf +359 -0
- slipwai/_bundle/assets/targets/aws/service/network.tf +47 -0
- slipwai/_bundle/assets/targets/aws/service/no-auth0.tf +18 -0
- slipwai/_bundle/assets/targets/aws/service/no-frontend.tf +5 -0
- slipwai/_bundle/assets/targets/aws/service/outputs.tf +23 -0
- slipwai/_bundle/assets/targets/aws/service/production.tfvars +11 -0
- slipwai/_bundle/assets/targets/aws/service/rds.tf +241 -0
- slipwai/_bundle/assets/targets/aws/service/staging.tfvars +10 -0
- slipwai/_bundle/assets/targets/aws/service/variables.tf +138 -0
- slipwai/_bundle/assets/targets/aws/service/versions.tf +50 -0
- slipwai/_bundle/assets/targets/azure/README.md +294 -0
- slipwai/_bundle/assets/targets/azure/bootstrap/main.tf +322 -0
- slipwai/_bundle/assets/targets/azure/bootstrap/outputs.tf +58 -0
- slipwai/_bundle/assets/targets/azure/bootstrap/variables.tf +73 -0
- slipwai/_bundle/assets/targets/azure/scripts/bootstrap.py +853 -0
- slipwai/_bundle/assets/targets/azure/scripts/check-flags.py +407 -0
- slipwai/_bundle/assets/targets/azure/scripts/deploy.py +1103 -0
- slipwai/_bundle/assets/targets/azure/service/auth0.tf +271 -0
- slipwai/_bundle/assets/targets/azure/service/entra_staff.tf +106 -0
- slipwai/_bundle/assets/targets/azure/service/flags.auto.tfvars +37 -0
- slipwai/_bundle/assets/targets/azure/service/flags.tf +205 -0
- slipwai/_bundle/assets/targets/azure/service/frontend.tf +92 -0
- slipwai/_bundle/assets/targets/azure/service/ingress.tf +25 -0
- slipwai/_bundle/assets/targets/azure/service/main.tf +293 -0
- slipwai/_bundle/assets/targets/azure/service/no-auth0.tf +18 -0
- slipwai/_bundle/assets/targets/azure/service/no-frontend.tf +7 -0
- slipwai/_bundle/assets/targets/azure/service/outputs.tf +22 -0
- slipwai/_bundle/assets/targets/azure/service/postgres.tf +246 -0
- slipwai/_bundle/assets/targets/azure/service/production.tfvars +13 -0
- slipwai/_bundle/assets/targets/azure/service/staging.tfvars +13 -0
- slipwai/_bundle/assets/targets/azure/service/variables.tf +157 -0
- slipwai/_bundle/assets/targets/azure/service/versions.tf +81 -0
- slipwai/_bundle/assets/toolkit/.specify/extensions.yml +149 -0
- slipwai/_bundle/assets/toolkit/docs/adr/0001-record-architecture-decisions.md +85 -0
- slipwai/_bundle/assets/toolkit/docs/agent-harnesses.md +127 -0
- slipwai/_bundle/assets/toolkit/docs/delegated-agent-safety.md +27 -0
- slipwai/_bundle/assets/toolkit/docs/event-model/README.md +668 -0
- slipwai/_bundle/assets/toolkit/docs/event-model/model.yaml +69 -0
- slipwai/_bundle/assets/toolkit/docs/event-modeling-to-code.md +250 -0
- slipwai/_bundle/assets/toolkit/docs/first-slice.md +104 -0
- slipwai/_bundle/assets/toolkit/scripts/agents/benchmark.py +739 -0
- slipwai/_bundle/assets/toolkit/scripts/agents/models.py +251 -0
- slipwai/_bundle/assets/toolkit/scripts/agents/project.py +674 -0
- slipwai/_bundle/assets/toolkit/scripts/agents/registry.json +744 -0
- slipwai/_bundle/assets/toolkit/scripts/check-codegraph.py +189 -0
- slipwai/_bundle/assets/toolkit/scripts/check-constitution.py +1013 -0
- slipwai/_bundle/assets/toolkit/scripts/check-imports.py +292 -0
- slipwai/_bundle/assets/toolkit/scripts/check-migrations.py +211 -0
- slipwai/_bundle/assets/toolkit/scripts/check-slice-scope.py +365 -0
- slipwai/_bundle/assets/toolkit/scripts/check-speckit.py +196 -0
- slipwai/_bundle/assets/toolkit/scripts/check-styles.py +159 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/check.py +553 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/check.ts +225 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/mermaid.ts +226 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/model.ts +589 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/package.json +12 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/page.ts +795 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/patch-mermaid-swimlanes.ts +228 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/readme.ts +197 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/render.ts +223 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/requirements.txt +1 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/validate.ts +859 -0
- slipwai/_bundle/assets/toolkit/scripts/event-model/workspace.ts +214 -0
- slipwai/_bundle/assets/toolkit/scripts/extensions/codegraph/init.py +120 -0
- slipwai/_bundle/assets/toolkit/scripts/extensions/guidance.py +105 -0
- slipwai/_bundle/assets/toolkit/scripts/extensions/menu.py +149 -0
- slipwai/_bundle/assets/toolkit/scripts/extensions/project.py +69 -0
- slipwai/_bundle/assets/toolkit/scripts/test_benchmark.py +106 -0
- slipwai/_bundle/assets/toolkit/skills/LICENSE +32 -0
- slipwai/_bundle/assets/toolkit/skills/REFERENCES.md +617 -0
- slipwai/_bundle/assets/toolkit/skills/acceptance-review/LICENSE +27 -0
- slipwai/_bundle/assets/toolkit/skills/acceptance-review/SKILL.md +109 -0
- slipwai/_bundle/assets/toolkit/skills/acceptance-review/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/acceptance-review/references/source-notes.md +21 -0
- slipwai/_bundle/assets/toolkit/skills/adversarial-testing/SKILL.md +243 -0
- slipwai/_bundle/assets/toolkit/skills/adversarial-testing/resources/attack-catalogue.md +157 -0
- slipwai/_bundle/assets/toolkit/skills/api-design/LICENSE +28 -0
- slipwai/_bundle/assets/toolkit/skills/api-design/SKILL.md +452 -0
- slipwai/_bundle/assets/toolkit/skills/api-design/resources/api-evolution.md +148 -0
- slipwai/_bundle/assets/toolkit/skills/api-design/resources/api-security.md +265 -0
- slipwai/_bundle/assets/toolkit/skills/api-design/resources/auth-security.md +73 -0
- slipwai/_bundle/assets/toolkit/skills/api-design/resources/http-fundamentals.md +94 -0
- slipwai/_bundle/assets/toolkit/skills/api-design/resources/problem-details.md +74 -0
- slipwai/_bundle/assets/toolkit/skills/api-design/resources/source-notes.md +30 -0
- slipwai/_bundle/assets/toolkit/skills/architecture-decisions/SKILL.md +233 -0
- slipwai/_bundle/assets/toolkit/skills/bff-design/SKILL.md +92 -0
- slipwai/_bundle/assets/toolkit/skills/bff-design/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/bff-design/references/adoption-and-granularity.md +67 -0
- slipwai/_bundle/assets/toolkit/skills/bff-design/references/aggregation-and-resilience.md +70 -0
- slipwai/_bundle/assets/toolkit/skills/bff-design/references/alternatives.md +50 -0
- slipwai/_bundle/assets/toolkit/skills/bff-design/references/upstream-identity.md +64 -0
- slipwai/_bundle/assets/toolkit/skills/bff-entry-points/SKILL.md +175 -0
- slipwai/_bundle/assets/toolkit/skills/bff-entry-points/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/bff-entry-points/references/browser-session-coordination.md +72 -0
- slipwai/_bundle/assets/toolkit/skills/bff-entry-points/references/endpoint-protection.md +159 -0
- slipwai/_bundle/assets/toolkit/skills/bff-entry-points/references/enforcement-and-testing.md +88 -0
- slipwai/_bundle/assets/toolkit/skills/bff-entry-points/references/hexagonal-auth-boundaries.md +145 -0
- slipwai/_bundle/assets/toolkit/skills/bff-entry-points/references/hono-example.md +196 -0
- slipwai/_bundle/assets/toolkit/skills/bff-entry-points/references/realtime-entry-points.md +99 -0
- slipwai/_bundle/assets/toolkit/skills/characterisation-tests/SKILL.md +218 -0
- slipwai/_bundle/assets/toolkit/skills/characterisation-tests/resources/modern-tooling.md +159 -0
- slipwai/_bundle/assets/toolkit/skills/characterisation-tests/resources/writing-process.md +239 -0
- slipwai/_bundle/assets/toolkit/skills/ci-debugging/SKILL.md +120 -0
- slipwai/_bundle/assets/toolkit/skills/cli-design/LICENSE +21 -0
- slipwai/_bundle/assets/toolkit/skills/cli-design/SKILL.md +503 -0
- slipwai/_bundle/assets/toolkit/skills/cli-design/resources/composability.md +29 -0
- slipwai/_bundle/assets/toolkit/skills/cli-design/resources/output-architecture.md +995 -0
- slipwai/_bundle/assets/toolkit/skills/cli-design/resources/source-notes.md +59 -0
- slipwai/_bundle/assets/toolkit/skills/cli-design/resources/stream-contracts.md +721 -0
- slipwai/_bundle/assets/toolkit/skills/cli-design/resources/testing-cli.md +684 -0
- slipwai/_bundle/assets/toolkit/skills/codebase-design/LICENSE +28 -0
- slipwai/_bundle/assets/toolkit/skills/codebase-design/SKILL.md +157 -0
- slipwai/_bundle/assets/toolkit/skills/codebase-design/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/codebase-design/references/deepening.md +100 -0
- slipwai/_bundle/assets/toolkit/skills/codebase-design/references/design-it-twice.md +74 -0
- slipwai/_bundle/assets/toolkit/skills/codebase-design/references/source-notes.md +58 -0
- slipwai/_bundle/assets/toolkit/skills/debugging/SKILL.md +119 -0
- slipwai/_bundle/assets/toolkit/skills/debugging/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/debugging/references/source-notes.md +19 -0
- slipwai/_bundle/assets/toolkit/skills/diagrams/NOTICE +8 -0
- slipwai/_bundle/assets/toolkit/skills/diagrams/SKILL.md +114 -0
- slipwai/_bundle/assets/toolkit/skills/diagrams/references/source-notes.md +14 -0
- slipwai/_bundle/assets/toolkit/skills/domain-driven-design/SKILL.md +363 -0
- slipwai/_bundle/assets/toolkit/skills/domain-driven-design/resources/aggregate-design.md +152 -0
- slipwai/_bundle/assets/toolkit/skills/domain-driven-design/resources/bounded-contexts.md +205 -0
- slipwai/_bundle/assets/toolkit/skills/domain-driven-design/resources/domain-events.md +114 -0
- slipwai/_bundle/assets/toolkit/skills/domain-driven-design/resources/domain-services.md +41 -0
- slipwai/_bundle/assets/toolkit/skills/domain-driven-design/resources/error-modeling.md +72 -0
- slipwai/_bundle/assets/toolkit/skills/domain-driven-design/resources/modelling-process.md +61 -0
- slipwai/_bundle/assets/toolkit/skills/domain-driven-design/resources/references.md +12 -0
- slipwai/_bundle/assets/toolkit/skills/domain-driven-design/resources/testing-by-layer.md +90 -0
- slipwai/_bundle/assets/toolkit/skills/double-check/SKILL.md +133 -0
- slipwai/_bundle/assets/toolkit/skills/double-check/resources/brief-template.md +71 -0
- slipwai/_bundle/assets/toolkit/skills/double-check/resources/providers.md +46 -0
- slipwai/_bundle/assets/toolkit/skills/evaluate-existing-solutions/SKILL.md +184 -0
- slipwai/_bundle/assets/toolkit/skills/evaluate-existing-solutions/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/evaluate-existing-solutions/assets/solution-decision-template.md +83 -0
- slipwai/_bundle/assets/toolkit/skills/evaluate-existing-solutions/references/evaluation-dimensions.md +49 -0
- slipwai/_bundle/assets/toolkit/skills/evaluate-existing-solutions/references/evidence-and-currentness.md +75 -0
- slipwai/_bundle/assets/toolkit/skills/event-modeling/NOTICE +16 -0
- slipwai/_bundle/assets/toolkit/skills/event-modeling/SKILL.md +337 -0
- slipwai/_bundle/assets/toolkit/skills/event-modeling/references/gwt-template.md +158 -0
- slipwai/_bundle/assets/toolkit/skills/event-modeling/references/nine-steps.md +333 -0
- slipwai/_bundle/assets/toolkit/skills/event-sourcing/SKILL.md +215 -0
- slipwai/_bundle/assets/toolkit/skills/event-sourcing/resources/decider-and-rehydration.md +79 -0
- slipwai/_bundle/assets/toolkit/skills/event-sourcing/resources/event-store.md +186 -0
- slipwai/_bundle/assets/toolkit/skills/event-sourcing/resources/event-versioning.md +76 -0
- slipwai/_bundle/assets/toolkit/skills/event-sourcing/resources/modelling-events.md +98 -0
- slipwai/_bundle/assets/toolkit/skills/event-sourcing/resources/production-concerns.md +81 -0
- slipwai/_bundle/assets/toolkit/skills/event-sourcing/resources/projections-and-read-models.md +174 -0
- slipwai/_bundle/assets/toolkit/skills/event-sourcing/resources/references.md +61 -0
- slipwai/_bundle/assets/toolkit/skills/event-sourcing/resources/testing-event-sourced-systems.md +73 -0
- slipwai/_bundle/assets/toolkit/skills/event-sourcing/resources/when-to-use-event-sourcing.md +33 -0
- slipwai/_bundle/assets/toolkit/skills/expectations/SKILL.md +80 -0
- slipwai/_bundle/assets/toolkit/skills/find-gaps/SKILL.md +336 -0
- slipwai/_bundle/assets/toolkit/skills/find-skills/LICENSE +29 -0
- slipwai/_bundle/assets/toolkit/skills/find-skills/SKILL.md +173 -0
- slipwai/_bundle/assets/toolkit/skills/find-skills/references/source-notes.md +29 -0
- slipwai/_bundle/assets/toolkit/skills/finding-seams/SKILL.md +125 -0
- slipwai/_bundle/assets/toolkit/skills/finding-seams/resources/creating-seams.md +286 -0
- slipwai/_bundle/assets/toolkit/skills/finding-seams/resources/oop-patterns.md +143 -0
- slipwai/_bundle/assets/toolkit/skills/finding-seams/resources/seam-types.md +282 -0
- slipwai/_bundle/assets/toolkit/skills/folder-structure/SKILL.md +15 -0
- slipwai/_bundle/assets/toolkit/skills/folder-structure/agents/openai.yaml +6 -0
- slipwai/_bundle/assets/toolkit/skills/front-end-testing/SKILL.md +409 -0
- slipwai/_bundle/assets/toolkit/skills/front-end-testing/resources/async-patterns.md +151 -0
- slipwai/_bundle/assets/toolkit/skills/front-end-testing/resources/dom-testing-library-legacy.md +147 -0
- slipwai/_bundle/assets/toolkit/skills/front-end-testing/resources/msw.md +138 -0
- slipwai/_bundle/assets/toolkit/skills/front-end-testing/resources/playwright-e2e.md +131 -0
- slipwai/_bundle/assets/toolkit/skills/functional/SKILL.md +276 -0
- slipwai/_bundle/assets/toolkit/skills/functional/resources/composition-patterns.md +182 -0
- slipwai/_bundle/assets/toolkit/skills/functional/resources/immutability-catalog.md +147 -0
- slipwai/_bundle/assets/toolkit/skills/global-event-model/SKILL.md +297 -0
- slipwai/_bundle/assets/toolkit/skills/hexagonal-architecture/SKILL.md +311 -0
- slipwai/_bundle/assets/toolkit/skills/hexagonal-architecture/resources/cqrs-lite.md +42 -0
- slipwai/_bundle/assets/toolkit/skills/hexagonal-architecture/resources/cross-cutting-concerns.md +94 -0
- slipwai/_bundle/assets/toolkit/skills/hexagonal-architecture/resources/greenfield-sequence.md +48 -0
- slipwai/_bundle/assets/toolkit/skills/hexagonal-architecture/resources/incremental-adoption.md +64 -0
- slipwai/_bundle/assets/toolkit/skills/hexagonal-architecture/resources/references.md +83 -0
- slipwai/_bundle/assets/toolkit/skills/hexagonal-architecture/resources/testing-hex-arch.md +76 -0
- slipwai/_bundle/assets/toolkit/skills/hexagonal-architecture/resources/worked-example.md +145 -0
- slipwai/_bundle/assets/toolkit/skills/improve-codebase-architecture/LICENSE +28 -0
- slipwai/_bundle/assets/toolkit/skills/improve-codebase-architecture/SKILL.md +186 -0
- slipwai/_bundle/assets/toolkit/skills/improve-codebase-architecture/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/improve-codebase-architecture/references/html-report.md +256 -0
- slipwai/_bundle/assets/toolkit/skills/improve-codebase-architecture/references/source-notes.md +42 -0
- slipwai/_bundle/assets/toolkit/skills/mutation-testing/SKILL.md +242 -0
- slipwai/_bundle/assets/toolkit/skills/mutation-testing/resources/mutator-rules.md +247 -0
- slipwai/_bundle/assets/toolkit/skills/observability/SKILL.md +281 -0
- slipwai/_bundle/assets/toolkit/skills/observability/resources/node-patterns.md +167 -0
- slipwai/_bundle/assets/toolkit/skills/observability/resources/references.md +71 -0
- slipwai/_bundle/assets/toolkit/skills/observability/resources/slo-alerting.md +123 -0
- slipwai/_bundle/assets/toolkit/skills/observability/resources/testing-telemetry.md +127 -0
- slipwai/_bundle/assets/toolkit/skills/planning/SKILL.md +382 -0
- slipwai/_bundle/assets/toolkit/skills/production-parity-skill-builder/SKILL.md +151 -0
- slipwai/_bundle/assets/toolkit/skills/production-parity-skill-builder/resources/generated-skill-template.md +97 -0
- slipwai/_bundle/assets/toolkit/skills/production-parity-skill-builder/resources/parity-surface-catalog.md +185 -0
- slipwai/_bundle/assets/toolkit/skills/production-parity-skill-builder/resources/question-patterns.md +79 -0
- slipwai/_bundle/assets/toolkit/skills/react-testing/SKILL.md +339 -0
- slipwai/_bundle/assets/toolkit/skills/react-testing/resources/testing-library-react-legacy.md +325 -0
- slipwai/_bundle/assets/toolkit/skills/reduce-system-complexity/LICENSE +28 -0
- slipwai/_bundle/assets/toolkit/skills/reduce-system-complexity/SKILL.md +187 -0
- slipwai/_bundle/assets/toolkit/skills/reduce-system-complexity/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/reduce-system-complexity/references/ledger-template.md +96 -0
- slipwai/_bundle/assets/toolkit/skills/reduce-system-complexity/references/source-notes.md +44 -0
- slipwai/_bundle/assets/toolkit/skills/refactoring/SKILL.md +155 -0
- slipwai/_bundle/assets/toolkit/skills/secure-oauth-oidc/SKILL.md +159 -0
- slipwai/_bundle/assets/toolkit/skills/secure-oauth-oidc/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/secure-oauth-oidc/references/attack-and-test-catalog.md +79 -0
- slipwai/_bundle/assets/toolkit/skills/secure-oauth-oidc/references/oidc-validation.md +191 -0
- slipwai/_bundle/assets/toolkit/skills/secure-oauth-oidc/references/review-and-delivery.md +183 -0
- slipwai/_bundle/assets/toolkit/skills/secure-oauth-oidc/references/rfc9700-control-catalog.md +117 -0
- slipwai/_bundle/assets/toolkit/skills/secure-oauth-oidc/references/standards-map.md +101 -0
- slipwai/_bundle/assets/toolkit/skills/specification/SKILL.md +90 -0
- slipwai/_bundle/assets/toolkit/skills/specification/resources/references.md +8 -0
- slipwai/_bundle/assets/toolkit/skills/specification/resources/spec-review-template.html +201 -0
- slipwai/_bundle/assets/toolkit/skills/stack-pull-requests/SKILL.md +323 -0
- slipwai/_bundle/assets/toolkit/skills/stack-pull-requests/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/stack-pull-requests/references/source-notes.md +61 -0
- slipwai/_bundle/assets/toolkit/skills/story-splitting/SKILL.md +295 -0
- slipwai/_bundle/assets/toolkit/skills/story-splitting/resources/pattern-catalog.md +205 -0
- slipwai/_bundle/assets/toolkit/skills/story-splitting/resources/source-notes.md +48 -0
- slipwai/_bundle/assets/toolkit/skills/storyboard/SKILL.md +249 -0
- slipwai/_bundle/assets/toolkit/skills/structure-codebase/SKILL.md +216 -0
- slipwai/_bundle/assets/toolkit/skills/structure-codebase/agents/openai.yaml +4 -0
- slipwai/_bundle/assets/toolkit/skills/structure-codebase/references/backend-patterns.md +206 -0
- slipwai/_bundle/assets/toolkit/skills/structure-codebase/references/enforcement-and-migration.md +125 -0
- slipwai/_bundle/assets/toolkit/skills/structure-codebase/references/frontend-patterns.md +179 -0
- slipwai/_bundle/assets/toolkit/skills/structure-codebase/references/research-notes.md +71 -0
- slipwai/_bundle/assets/toolkit/skills/structure-codebase/references/visible-hexagon.md +200 -0
- slipwai/_bundle/assets/toolkit/skills/tdd/SKILL.md +288 -0
- slipwai/_bundle/assets/toolkit/skills/tdd/resources/vitest-watch-feedback.md +64 -0
- slipwai/_bundle/assets/toolkit/skills/teach-me/SKILL.md +455 -0
- slipwai/_bundle/assets/toolkit/skills/teach-me/resources/assessment-patterns.md +224 -0
- slipwai/_bundle/assets/toolkit/skills/teach-me/resources/course-generation.md +372 -0
- slipwai/_bundle/assets/toolkit/skills/teach-me/resources/html-lessons.md +249 -0
- slipwai/_bundle/assets/toolkit/skills/teach-me/resources/learning-science.md +203 -0
- slipwai/_bundle/assets/toolkit/skills/teach-me/resources/session-management.md +250 -0
- slipwai/_bundle/assets/toolkit/skills/technical-writing/LICENSE +21 -0
- slipwai/_bundle/assets/toolkit/skills/technical-writing/SKILL.md +152 -0
- slipwai/_bundle/assets/toolkit/skills/technical-writing/resources/agent-docs.md +40 -0
- slipwai/_bundle/assets/toolkit/skills/technical-writing/resources/doc-types.md +67 -0
- slipwai/_bundle/assets/toolkit/skills/technical-writing/resources/docs-quality.md +100 -0
- slipwai/_bundle/assets/toolkit/skills/technical-writing/resources/formatting.md +55 -0
- slipwai/_bundle/assets/toolkit/skills/technical-writing/resources/readme.md +46 -0
- slipwai/_bundle/assets/toolkit/skills/technical-writing/resources/references.md +38 -0
- slipwai/_bundle/assets/toolkit/skills/technical-writing/resources/source-notes.md +23 -0
- slipwai/_bundle/assets/toolkit/skills/test-design-reviewer/SKILL.md +82 -0
- slipwai/_bundle/assets/toolkit/skills/test-design-reviewer/references/source-notes.md +7 -0
- slipwai/_bundle/assets/toolkit/skills/testing/SKILL.md +274 -0
- slipwai/_bundle/assets/toolkit/skills/twelve-factor/SKILL.md +243 -0
- slipwai/_bundle/assets/toolkit/skills/twelve-factor/resources/node-patterns.md +227 -0
- slipwai/_bundle/assets/toolkit/skills/typescript-strict/SKILL.md +236 -0
- slipwai/_bundle/assets/toolkit/skills/ubiquitous-language/SKILL.md +92 -0
- slipwai/_bundle/assets/toolkit/skills/ubiquitous-language/resources/glossary-format.md +66 -0
- slipwai/_bundle/assets/toolkit/skills/ubiquitous-language/resources/language-protocol.md +68 -0
- slipwai/_bundle/assets/toolkit/skills/wtf/LICENSE +21 -0
- slipwai/_bundle/assets/toolkit/skills/wtf/SKILL.md +55 -0
- slipwai/_bundle/assets/toolkit/skills/wtf/agents/openai.yaml +6 -0
- slipwai/_bundle/assets/toolkit/skills/wtf/references/source-notes.md +15 -0
- slipwai/_bundle/catalog.json +694 -0
- slipwai/_bundle/changelog.d/README.md +34 -0
- slipwai/_bundle/changelog.d/init-reruns-leave-spec-kit-alone.md +12 -0
- slipwai/_bundle/changelog.d/initial-public-release.md +6 -0
- slipwai/add_service.py +231 -0
- slipwai/adopt.py +264 -0
- slipwai/adopt_report.py +247 -0
- slipwai/assets.py +123 -0
- slipwai/axes.py +196 -0
- slipwai/backends.py +300 -0
- slipwai/capabilities.py +100 -0
- slipwai/catalog.py +224 -0
- slipwai/catch_up.py +243 -0
- slipwai/changelog.py +77 -0
- slipwai/cli.py +241 -0
- slipwai/cli_add.py +233 -0
- slipwai/cli_adopt.py +338 -0
- slipwai/cli_prompts.py +340 -0
- slipwai/converge.py +265 -0
- slipwai/convergence.py +255 -0
- slipwai/delivery_facts.py +147 -0
- slipwai/ecosystems.py +347 -0
- slipwai/errors.py +6 -0
- slipwai/examples.py +136 -0
- slipwai/extensions.py +37 -0
- slipwai/features.py +99 -0
- slipwai/images.py +293 -0
- slipwai/layout.py +134 -0
- slipwai/manifest.py +190 -0
- slipwai/migrate.py +293 -0
- slipwai/naming.py +36 -0
- slipwai/origin.py +168 -0
- slipwai/platform.py +319 -0
- slipwai/preflight.py +97 -0
- slipwai/probes.py +70 -0
- slipwai/programme.py +225 -0
- slipwai/project/__init__.py +6 -0
- slipwai/project/add_commands.py +349 -0
- slipwai/project/adopted.py +348 -0
- slipwai/project/adopted_ci.py +151 -0
- slipwai/project/adopted_targets.py +63 -0
- slipwai/project/adversary.py +134 -0
- slipwai/project/agent_settings.py +82 -0
- slipwai/project/agents.py +244 -0
- slipwai/project/aws_docs.py +259 -0
- slipwai/project/azure_docs.py +271 -0
- slipwai/project/backing_service_prose.py +252 -0
- slipwai/project/backing_services.py +122 -0
- slipwai/project/benchmark.py +130 -0
- slipwai/project/biome.py +56 -0
- slipwai/project/ci_services.py +49 -0
- slipwai/project/ci_workflows.py +259 -0
- slipwai/project/commands.py +330 -0
- slipwai/project/compose.py +131 -0
- slipwai/project/composition.py +81 -0
- slipwai/project/constitution_journey.py +99 -0
- slipwai/project/convergence_page.py +66 -0
- slipwai/project/demo_stop.py +110 -0
- slipwai/project/deploy_workflow.py +348 -0
- slipwai/project/design_page.py +156 -0
- slipwai/project/docs.py +288 -0
- slipwai/project/docs_index.py +76 -0
- slipwai/project/drive_adoption.py +198 -0
- slipwai/project/entry_stores.py +350 -0
- slipwai/project/event_model.py +327 -0
- slipwai/project/evolving.py +51 -0
- slipwai/project/existing.py +133 -0
- slipwai/project/flag_route.py +218 -0
- slipwai/project/flags.py +294 -0
- slipwai/project/frontend.py +224 -0
- slipwai/project/gitignore.py +145 -0
- slipwai/project/ground_command.py +232 -0
- slipwai/project/guidance.py +321 -0
- slipwai/project/infra.py +195 -0
- slipwai/project/init_production.py +74 -0
- slipwai/project/init_script.py +296 -0
- slipwai/project/integration.py +79 -0
- slipwai/project/languages/__init__.py +40 -0
- slipwai/project/languages/go.py +183 -0
- slipwai/project/languages/java.py +71 -0
- slipwai/project/languages/java_quarkus.py +59 -0
- slipwai/project/languages/java_spring.py +57 -0
- slipwai/project/languages/python.py +262 -0
- slipwai/project/languages/typescript.py +336 -0
- slipwai/project/makefile.py +350 -0
- slipwai/project/metadata.py +73 -0
- slipwai/project/model_to_code.py +60 -0
- slipwai/project/mutation.py +215 -0
- slipwai/project/native_commands.py +283 -0
- slipwai/project/openapi.py +161 -0
- slipwai/project/parallel_slices.py +130 -0
- slipwai/project/pin_commands.py +174 -0
- slipwai/project/pins.py +88 -0
- slipwai/project/production.py +137 -0
- slipwai/project/provisioning.py +24 -0
- slipwai/project/read_side_layouts.py +260 -0
- slipwai/project/readme.py +346 -0
- slipwai/project/renovate.py +181 -0
- slipwai/project/repository.py +164 -0
- slipwai/project/rules.py +286 -0
- slipwai/project/run_skill.py +333 -0
- slipwai/project/service_layouts.py +349 -0
- slipwai/project/shared_packages.py +137 -0
- slipwai/project/skills_page.py +96 -0
- slipwai/project/stage_models.py +289 -0
- slipwai/project/strangle_command.py +230 -0
- slipwai/project/structure_page.py +203 -0
- slipwai/project/target_docs.py +104 -0
- slipwai/project/where_are_we.py +91 -0
- slipwai/quick_wins.py +212 -0
- slipwai/replay.py +297 -0
- slipwai/resurvey.py +336 -0
- slipwai/scaffold.py +238 -0
- slipwai/selection.py +237 -0
- slipwai/services.py +350 -0
- slipwai/strategy.py +193 -0
- slipwai/structure.py +350 -0
- slipwai/survey.py +302 -0
- slipwai/targets.py +271 -0
- slipwai/tooling.py +74 -0
- slipwai/toolkit.py +193 -0
- slipwai/upgrade.py +302 -0
- slipwai/versions.py +111 -0
- slipwai/wrappers.py +118 -0
- slipwai-1.0.0.dev10.dist-info/METADATA +299 -0
- slipwai-1.0.0.dev10.dist-info/RECORD +1298 -0
- slipwai-1.0.0.dev10.dist-info/WHEEL +4 -0
- slipwai-1.0.0.dev10.dist-info/entry_points.txt +2 -0
- slipwai-1.0.0.dev10.dist-info/licenses/LICENSE +21 -0
- slipwai-1.0.0.dev10.dist-info/licenses/NOTICE +29 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/LICENSE +32 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/acceptance-review/LICENSE +27 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/api-design/LICENSE +28 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/cli-design/LICENSE +21 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/codebase-design/LICENSE +28 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/diagrams/NOTICE +8 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/event-modeling/NOTICE +16 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/find-skills/LICENSE +29 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/improve-codebase-architecture/LICENSE +28 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/reduce-system-complexity/LICENSE +28 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/technical-writing/LICENSE +21 -0
- slipwai-1.0.0.dev10.dist-info/licenses/assets/toolkit/skills/wtf/LICENSE +21 -0
slipwai/__init__.py
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"""Slipwai, the factory: one command that scaffolds a new product monorepo.
|
|
2
|
+
|
|
3
|
+
`cli` is the entry point, `scaffold` assembles a project, and `project/` holds one module per part of
|
|
4
|
+
the repository being generated. Nothing here reads the working directory: every path comes from
|
|
5
|
+
`assets`, so the same answers produce the same project from anywhere.
|
|
6
|
+
"""
|
slipwai/__main__.py
ADDED
slipwai/_bundle/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.0.0.dev10
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# The canonical toolkit
|
|
2
|
+
|
|
3
|
+
Everything a generated project receives lives here. No starter copy is committed anywhere, so a change in
|
|
4
|
+
this tree reaches every combination the moment it is generated.
|
|
5
|
+
|
|
6
|
+
| Directory | Holds |
|
|
7
|
+
|---|---|
|
|
8
|
+
| `toolkit/skills/` | The shared delivery and event skills, canonical in their event-modelling form |
|
|
9
|
+
| `toolkit/docs/` | Shared methodology documentation (event modeling to code, first slice) |
|
|
10
|
+
| `toolkit/scripts/` | The dependency-free gate scripts a generated repository ships |
|
|
11
|
+
| `profiles/standard/` | The rewritten overlays, and the preset, that derive the standard profile |
|
|
12
|
+
| `profiles/event-modelling/` | Additions specific to the event profile |
|
|
13
|
+
| `languages/<language>/app/` | Each backend's walking skeleton, laid out at the paths it lands on under the service's directory — `apps/service/` by default |
|
|
14
|
+
| `languages/java/build/` | The Maven wrapper and analyser configuration both Java backends share |
|
|
15
|
+
| `languages/<language>/event-port/` | The event-store port with no adapter behind it, for a backend whose event-store axis offers nothing yet. Every backend offers the axis today, so this is not emitted for any of them; it is kept for the next language on the day it lands before its stores do |
|
|
16
|
+
| `languages/<language>/locks/`, `go/modules/` | Committed dependency locks, one per dependency set the axes can produce |
|
|
17
|
+
| `languages/<language>/examples/` | The snippet a `{{example: skill/id}}` marker resolves to, per language; a project written in several languages gets one labelled block per language at each marker |
|
|
18
|
+
| `frontends/<frontend>/` | Frontend packs — currently `react-vite`: the `app/` skeleton, `features/<feature>/` copied into every browser app when a service has that feature (the customer login), and `locks/` per dependency set |
|
|
19
|
+
| `backing-services/` | Axis implementations: event-store, HTTP, staff-identity and customer-identity adapters per backend, the shared `sql/` event-log schema, the Keycloak realms under `keycloak/realms/`, the Compose file, and the pruner shared with generated projects |
|
|
20
|
+
|
|
21
|
+
The toolkit is canonical in its event-modelling form, which is why `profiles/standard/` is the
|
|
22
|
+
only profile directory with rewritten overlays.
|
|
23
|
+
|
|
24
|
+
## Editing it
|
|
25
|
+
|
|
26
|
+
Edit the material in place, then run `make verify` from the factory root. There is no import or
|
|
27
|
+
synchronization step and no remote source repository: the factory is self-contained. Spec Kit itself is
|
|
28
|
+
not vendored — each generated project's `./init` installs it.
|
|
29
|
+
|
|
30
|
+
**A generated file's body belongs in this tree, never as a string in the generator.** The `app/` trees
|
|
31
|
+
here and under `frontends/` are read as trees, so adding a file to a starter is an edit in this directory
|
|
32
|
+
and nothing else. Code decides content only where the *selection* does — a marked region, a per-feature
|
|
33
|
+
dependency list, a name derived from the project — and `tests/test_language_skeletons.py` fails a language
|
|
34
|
+
module that stops reading its tree.
|
|
35
|
+
|
|
36
|
+
Routing and the generated adaptations live in `src/slipwai/`: one module per part of the
|
|
37
|
+
repository being generated, so the file to open is named after the file you are changing.
|
|
38
|
+
|
|
39
|
+
See [docs/maintaining.md](../docs/maintaining.md) for the verification and browsing workflow, and
|
|
40
|
+
[docs/axes.md](../docs/axes.md) for what each axis answer is expected to deliver.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# How this repository changes
|
|
2
|
+
|
|
3
|
+
> **Experimental.** This page arrived with brownfield adoption and will change as real programmes teach it
|
|
4
|
+
> what it gets wrong. What surprised you belongs on the public issue tracker.
|
|
5
|
+
|
|
6
|
+
The delivery method is installed. `make verify` is green, the survey says what is here, and `/characterise`
|
|
7
|
+
can pin any behaviour before it changes. Nothing on this page had to be decided for that to happen, and that
|
|
8
|
+
was the point: the method makes every later step safe for an agent to attempt, and only now is the question
|
|
9
|
+
*which* step. This page is the Choose and Slice stages — three strategies, the order to change in, what
|
|
10
|
+
to do about data and infrastructure, and the one rule that holds all of it together.
|
|
11
|
+
|
|
12
|
+
## Three strategies, not two
|
|
13
|
+
|
|
14
|
+
| Strategy | What it is | When it is right | What it needs |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| **Strangler fig** | New capability grows beside the old system and takes its traffic one capability at a time, until the old system serves nothing and is removed | The system is large, alive and cannot stop; there is a seam requests enter through; the business trigger (`project.json`'s `why`) is a capability that has to change, not a platform that has to go | A routing seam, a data strategy that is not dual-write, and the retirement ledger |
|
|
17
|
+
| **Modular monolith in place** | The code is restructured behind its characterisation tests — contexts found, seams made, layers separated — without a second deployable or a routing seam | The system is one deployable that mostly works, the trigger is "cannot change it safely" rather than "cannot run it", and the team is small | `/characterise` before every move, `refactoring` and `improve-codebase-architecture`, and patience; the import gate's rule can be adopted context by context (`"layout": "hexagonal"`) |
|
|
18
|
+
| **Rewrite** | A new system replaces the old one, and the old one is switched off | The system is small enough to hold in one head; there is no seam to strangle through; the platform is dead and cannot be upgraded in place | Characterisation of everything the rewrite claims to preserve, a cut-over plan with a rollback, and the honesty that most rewrites are cancelled halfway |
|
|
19
|
+
|
|
20
|
+
Rewrite is the exception, chosen when the other two cannot work, not the default because it is cleaner.
|
|
21
|
+
A programme is allowed to change its mind: a strangler that finds one context is the whole system may
|
|
22
|
+
become a rewrite of that context, and a rewrite that turns out to have a seam after all may become a
|
|
23
|
+
strangler. What is not allowed is to do neither and call the refactoring a strategy.
|
|
24
|
+
|
|
25
|
+
## Be honest about the event model
|
|
26
|
+
|
|
27
|
+
The generated method carries Event Modeling and event sourcing as one bundle, and the factory's own position
|
|
28
|
+
is that "start standard and adopt events where a subdomain earns it" is an option that mostly does not
|
|
29
|
+
exist: state cannot be turned back into history it never recorded. Brownfield does not change that. What
|
|
30
|
+
event modelling means here is **new slices at the edge**: a capability that moves to a new home is modelled
|
|
31
|
+
as events from the day it moves, with its history starting at a **genesis event** that records the state
|
|
32
|
+
the legacy system handed over, or with a change-data-capture stream translating the legacy tables into
|
|
33
|
+
events the new home reads. The legacy system itself is an **external system** in the model — an actor and
|
|
34
|
+
a swimlane, its events marked `external: true`, never a set of events invented by renaming its tables.
|
|
35
|
+
`/survey` says the same in the event-modelling profile; do not promise more than this.
|
|
36
|
+
|
|
37
|
+
## Separate the layers, and do one at a time
|
|
38
|
+
|
|
39
|
+
Most programmes mix six changes into one and then cannot say which one broke it. The order below is
|
|
40
|
+
from the cheapest and most mechanical to the one only a person can decide, and each is a stopping point that
|
|
41
|
+
leaves the system better than before.
|
|
42
|
+
|
|
43
|
+
Under the ladder is its floor: **a build that declares its dependencies and fetches them** — Maven or Gradle
|
|
44
|
+
through the wrapper for Java, the package manager for everything else. An Ant build with its jars committed is
|
|
45
|
+
below it, and no rung above can be taken from there: nothing dates a jar by its name for long, nothing audits
|
|
46
|
+
it, and no CI runner has the tool without being told. So where the survey finds one, the programme opens with
|
|
47
|
+
the move — a `pom.xml` that declares each committed jar by its coordinates, sources under `src/main/java`, the
|
|
48
|
+
same artifact out of `./mvnw -q package`, then `/survey` reads the tree as Maven — and it is the one step no
|
|
49
|
+
strategy paces differently: *leave it* still takes it, because it is the least the method holds any repository
|
|
50
|
+
to. The rungs:
|
|
51
|
+
|
|
52
|
+
1. **Language version** — the runtime the code is compiled or interpreted against. Java 8 → 21, Python 2 →
|
|
53
|
+
3, .NET Framework → .NET. Largely mechanical: **OpenRewrite** recipes for Java (`UpgradeToJava21` and the
|
|
54
|
+
framework migrations beside it), `pyupgrade` and `futurize` for Python, the .NET **Upgrade Assistant**
|
|
55
|
+
for C#. Point the agent at the recipe, not at the files: a recipe applied is a diff to review; an agent
|
|
56
|
+
hand-rewriting a thousand files is a thousand chances to be wrong.
|
|
57
|
+
2. **Framework** — Spring 4 → Boot, Struts → anything, AngularJS → Angular through `ngUpgrade`'s hybrid
|
|
58
|
+
mode, Express 3 → 4. OpenRewrite has recipes for the Java rungs (`SpringBootUpgrade`); the others are
|
|
59
|
+
guided and pinned by `/characterise` at the HTTP boundary.
|
|
60
|
+
3. **Packaging** — WAR on an application server → an executable jar, a `.NET Framework` site → a self-hosted
|
|
61
|
+
process, a set of scripts → a package. The survey records `packaging: war` where it sees one; this rung
|
|
62
|
+
is where it stops mattering.
|
|
63
|
+
4. **Runtime** — VM → container, or the container base image the packaging now allows. The first `Dockerfile`
|
|
64
|
+
is written here, and `make verify` grows a step that builds it.
|
|
65
|
+
5. **Host** — where it runs: on-premises → a cloud, or one cloud → another. `docs/deployment.md` records the
|
|
66
|
+
infrastructure's home and the rule (import or reference, never manage a resource in two places); the
|
|
67
|
+
factory's `aws` target is one possible destination for a *generated* service, and never a claim about the
|
|
68
|
+
legacy system's host.
|
|
69
|
+
6. **Architecture** — the strangler, the modular monolith, the contexts. Last, because every rung above it is
|
|
70
|
+
cheaper with a green gate and characterisation tests, and none of them needs an architectural decision.
|
|
71
|
+
|
|
72
|
+
A programme whose `why` is "end-of-life runtime" stops after rung 1 or 2 and has succeeded. One whose `why`
|
|
73
|
+
is "cannot ship" usually finds its problem at rung 6 and needs the five below it first. The survey reads
|
|
74
|
+
which of these is actually out of support — the runtime the tree pins, the framework and test framework the
|
|
75
|
+
manifest declares, the images a `Dockerfile` starts from — and dates each against the factory's support table
|
|
76
|
+
(`__DELIVERY__/survey/structure.md`, *What it runs on*); a product past its end of life goes at the head of the
|
|
77
|
+
recommendation's `before` list whatever `why` says, with the way up named for it, and is the map's Platform
|
|
78
|
+
row climbing `inventoried` → `supported` → `audited`. `/survey` re-dates on the day it runs, so a runtime that
|
|
79
|
+
leaves support while the programme goes on shows up without anyone looking.
|
|
80
|
+
|
|
81
|
+
## Data
|
|
82
|
+
|
|
83
|
+
- **Schema ownership is the usual blocker.** `project.json`'s `database.schema` records where the schema is
|
|
84
|
+
versioned: `here`, `elsewhere` (a repository that is now the contract), `unmanaged` (a DBA, a console) or
|
|
85
|
+
`none`. Nothing is moved until somebody can answer who else reads these tables; the answer is written in
|
|
86
|
+
`docs/deployment.md` beside the infrastructure.
|
|
87
|
+
- **Migration tooling, where there is none.** Flyway or Liquibase for the JVM, Alembic or Django's for
|
|
88
|
+
Python, Prisma or knex for Node, EF migrations for .NET, `golang-migrate` for Go — recommended, not
|
|
89
|
+
scaffolded: the tool belongs to the ecosystem the schema lives in, and a baseline migration that matches
|
|
90
|
+
the database as it is (`baseline-on-migrate` in Flyway's words) is the first migration, never a rewrite of
|
|
91
|
+
the schema from memory.
|
|
92
|
+
- **Dual-write is a trap.** Two systems each writing the same fact drift the first time one of them fails.
|
|
93
|
+
Move data with **change data capture** from the legacy store, or an **outbox** written in the legacy
|
|
94
|
+
system's own transaction, and let the new home read that. One writer per fact, always.
|
|
95
|
+
- **Rehearse the migration.** Every cut-over is run against a copy first, with a **reconciliation report**
|
|
96
|
+
— counts, sums, samples — between the old and new stores, and a **rollback plan** that has been executed
|
|
97
|
+
at least once in rehearsal. A migration that has not been rolled back in rehearsal has no rollback plan.
|
|
98
|
+
- **Dual-run, then cut over.** The new home serves reads in shadow, its answers reconciled against the old
|
|
99
|
+
system's, before it serves anything to an actor; then the flag flips one capability at a time.
|
|
100
|
+
- **Some things do not move.** Data residency, audit retention, regulatory constraints on where a record may
|
|
101
|
+
live — find them in the survey stage and write them down, because a strategy that ignores one is cancelled
|
|
102
|
+
the day somebody notices.
|
|
103
|
+
|
|
104
|
+
## Infrastructure
|
|
105
|
+
|
|
106
|
+
Three cases, and one rule. **ClickOps**, nothing describes the infrastructure: describe it before anything
|
|
107
|
+
imports it, because describing is safe and importing what is not described is how two things end up
|
|
108
|
+
managing one resource. **A platform team's IaC in another repository**: that repository is the contract, and
|
|
109
|
+
what this one hands over — a tag, an image, a ticket — is written in `docs/deployment.md`. **IaC in this
|
|
110
|
+
repository**: the factory adds nothing to it and manages none of it. The rule in all three: **import or
|
|
111
|
+
reference** — `tofu import`, data sources — and never manage a resource in two places. `docs/deployment.md`
|
|
112
|
+
records which case this is and where the description lives.
|
|
113
|
+
|
|
114
|
+
## Every step shippable, every step reversible
|
|
115
|
+
|
|
116
|
+
Most programmes are cancelled halfway. Slice the programme so that stopping at any point leaves the
|
|
117
|
+
system better than it was: a runtime upgrade shipped is a win whether or not the strangler ever starts; a
|
|
118
|
+
capability moved and routed is a win whether or not the next one moves. A step that only pays off once the
|
|
119
|
+
whole programme finishes is a step to split. And every step is reversible while it is fresh: the flag flips
|
|
120
|
+
back, the router points back, the migration rolls back — which is why the flag, the router and the rollback
|
|
121
|
+
are decided in the slice's plan and not after the code exists.
|
|
122
|
+
|
|
123
|
+
## The agent's context
|
|
124
|
+
|
|
125
|
+
A legacy codebase is larger than any context window, and an agent that reads files one at a time in it will
|
|
126
|
+
be confidently wrong. Before the first slice: the survey (`survey/survey.md`), the code index
|
|
127
|
+
(`./init --extension codegraph`), and a module map — which directories are which contexts, in the agent's
|
|
128
|
+
guidance. `/characterise` before each change, `/strangle` for each capability that moves, and the ledgers
|
|
129
|
+
they keep are what let a later session pick up where this one stopped.
|
|
130
|
+
|
|
131
|
+
## The retirement ledger
|
|
132
|
+
|
|
133
|
+
`__DELIVERY__/retirement.md` is the record of the strangler: one row per capability, from where, to where,
|
|
134
|
+
routed by what, pinned by which tests, and its status — *routed*, *moved*, *retired* or *removed*. `/strangle`
|
|
135
|
+
writes the rows; the programme is finished when every row is *removed* and nothing else is left. A ledger
|
|
136
|
+
that stops being written is the first sign that a programme has quietly become a second system beside
|
|
137
|
+
the first, which is the one outcome worse than either.
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Hold the convergence map to the tree: fail a row that claims a rung the repository contradicts, and a page
|
|
3
|
+
that no longer matches the record.
|
|
4
|
+
|
|
5
|
+
python3 scripts/check-convergence.py
|
|
6
|
+
|
|
7
|
+
`project.json`'s `convergence` rows say where an adopted repository stands on each ladder (brownfield adoption;
|
|
8
|
+
experimental). Most rungs only a person can establish, and those stand as written. What the tree can contradict
|
|
9
|
+
it does: a constitution that is still the template cannot be `ratified`; a test suite the ratchet quarantines
|
|
10
|
+
cannot be `tests-pass`; a repository whose release path is `manual` is not on `pipeline`; an application whose
|
|
11
|
+
role is not established is not `named`. An `unrecorded` row passes with a line saying so — it is a question, not
|
|
12
|
+
a gap. A page rendered from other rows than the record now holds is stale, and fails: `/survey` regenerates it.
|
|
13
|
+
"""
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import hashlib
|
|
17
|
+
import json
|
|
18
|
+
import re
|
|
19
|
+
import sys
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def project_root(script: Path) -> Path:
|
|
24
|
+
for candidate in script.parents:
|
|
25
|
+
if (candidate / "project.json").is_file():
|
|
26
|
+
return candidate
|
|
27
|
+
return script.parents[1]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
SCRIPT = Path(__file__).resolve()
|
|
31
|
+
ROOT = project_root(SCRIPT)
|
|
32
|
+
DELIVERY = SCRIPT.parents[1]
|
|
33
|
+
PAGE = DELIVERY / "docs/convergence.md"
|
|
34
|
+
BASELINE = DELIVERY / "baseline.json"
|
|
35
|
+
CONSTITUTION = ROOT / ".specify/memory/constitution.md"
|
|
36
|
+
PLACEHOLDER = re.compile(r"\[[A-Z][A-Z0-9_]{2,}[^\]]*\]")
|
|
37
|
+
# A whole line, as `slipwai.strategy` reads it; a sentence mentioning the `Strategy:` line is not the line.
|
|
38
|
+
ADR_STRATEGY = re.compile(r"^\W*strategy\W*:\W*([a-z-]+)\W*$", re.IGNORECASE | re.MULTILINE)
|
|
39
|
+
STRATEGIES = ("leave-it", "in-place", "modular-monolith", "strangler-fig", "rewrite")
|
|
40
|
+
# What a strategy was called before the axis was `strategy`: an ADR accepted under the older spelling still
|
|
41
|
+
# decides, and the record is written under the current name by the next `/survey`.
|
|
42
|
+
OLD_STRATEGIES = {"modernise-in-place": "in-place"}
|
|
43
|
+
ADR_ACCEPTED = re.compile(r"^## Status\s*\n+\s*Accepted\b", re.MULTILINE)
|
|
44
|
+
LEDGER = DELIVERY / "retirement.md"
|
|
45
|
+
MARKER = re.compile(r"<!-- convergence: ([0-9a-f]+) -->")
|
|
46
|
+
RUNGS = {
|
|
47
|
+
"path-to-production": ("unknown", "manual", "scripted", "pipeline", "one-path", "pipeline-decides"),
|
|
48
|
+
"integration": ("unknown", "branches", "trunk", "continuous"),
|
|
49
|
+
"safety-net": ("none", "tests-exist", "tests-pass", "fast", "pinned", "mutation-measured"),
|
|
50
|
+
"structure": ("as-found", "named", "laid-out", "hexagonal", "typed"),
|
|
51
|
+
"platform": ("unknown", "inventoried", "supported", "audited"),
|
|
52
|
+
"constitution": ("template", "ratified", "in-full"),
|
|
53
|
+
"data": ("open", "recorded", "settled"),
|
|
54
|
+
"infrastructure": ("open", "recorded", "settled"),
|
|
55
|
+
"strategy": ("open", "why-recorded", "recommended", "decided", "done"),
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def caps(document: dict) -> dict[str, tuple[str, str]]:
|
|
60
|
+
"""The highest rung the tree allows each axis, with the fact that caps it — only where the tree can say."""
|
|
61
|
+
found: dict[str, tuple[str, str]] = {}
|
|
62
|
+
release = (document.get("release") or {}).get("path", "unknown")
|
|
63
|
+
if release in ("unknown", "manual", "scripted"):
|
|
64
|
+
found["path-to-production"] = (release, f"release.path is `{release}`")
|
|
65
|
+
wrapped = [r for r in (document.get("deployables") or {}).values() if r.get("generated") is False]
|
|
66
|
+
if wrapped:
|
|
67
|
+
if any(r.get("kind") == "application" for r in wrapped):
|
|
68
|
+
found["structure"] = ("as-found", "an application's role is not established (`kind: application`)")
|
|
69
|
+
elif not all(r.get("path", "").startswith("apps/") for r in wrapped):
|
|
70
|
+
found["structure"] = ("named", "not every application lives under apps/")
|
|
71
|
+
elif not all(r.get("layout") == "hexagonal" for r in wrapped):
|
|
72
|
+
found["structure"] = ("laid-out", "not every application declares the hexagonal layout")
|
|
73
|
+
elif not all((r.get("commands") or {}).get("typecheck") for r in wrapped):
|
|
74
|
+
found["structure"] = ("hexagonal", "not every application records a typecheck command")
|
|
75
|
+
if not any((r.get("commands") or {}).get("test") for r in wrapped):
|
|
76
|
+
found["safety-net"] = ("none", "no application records a test command")
|
|
77
|
+
# What the applications run on, as `/survey` dated it: a product past its end of life, or one the table does
|
|
78
|
+
# not know, caps the row; a missing audit command caps it below `audited`. A person who knows better — a
|
|
79
|
+
# vendor's paid support — records the row with `confirmed` provenance and the terms as evidence, and this
|
|
80
|
+
# still says what the tree and the table say.
|
|
81
|
+
products = [p for p in ((document.get("platform") or {}).get("products") or []) if isinstance(p, dict)]
|
|
82
|
+
if not products:
|
|
83
|
+
found["platform"] = ("unknown", "no runtime pin, framework version or image was dated by the survey")
|
|
84
|
+
else:
|
|
85
|
+
behind = [f"{p.get('title')} {p.get('version')}" for p in products
|
|
86
|
+
if p.get("status") in ("end-of-life", "unknown")]
|
|
87
|
+
# An Ant build declares nothing a tool can audit: its jars are committed. The floor under the ladder is
|
|
88
|
+
# a build that does (`docs/change-strategy.md`), and the programme's first step is to move there.
|
|
89
|
+
ant = [r.get("name") for r in wrapped if (r.get("toolchain") or {}).get("ecosystem") == "ant"]
|
|
90
|
+
if behind and (document.get("platform") or {}).get("provenance") != "confirmed":
|
|
91
|
+
found["platform"] = ("inventoried",
|
|
92
|
+
f"{', '.join(behind)} is out of support or not in the support table")
|
|
93
|
+
elif ant:
|
|
94
|
+
found["platform"] = ("inventoried", f"{', '.join(map(str, ant))} builds with Ant, whose committed jars "
|
|
95
|
+
"nothing can audit — Maven or Gradle first")
|
|
96
|
+
elif not all((r.get("commands") or {}).get("audit") for r in wrapped):
|
|
97
|
+
found["platform"] = ("supported", "not every application records an audit command")
|
|
98
|
+
if BASELINE.is_file():
|
|
99
|
+
try:
|
|
100
|
+
baseline = json.loads(BASELINE.read_text())
|
|
101
|
+
except ValueError:
|
|
102
|
+
baseline = {}
|
|
103
|
+
red = []
|
|
104
|
+
for name, targets in baseline.items():
|
|
105
|
+
test = targets.get("test") or {}
|
|
106
|
+
if test.get("exit"):
|
|
107
|
+
# The runner's own failure names are findings (`test: <name>`), so the count is of failing tests
|
|
108
|
+
# where the output named them, and of nothing where it did not.
|
|
109
|
+
failing = sum(1 for finding in test.get("findings") or [] if str(finding).startswith("test: "))
|
|
110
|
+
red.append(f"{name} ({failing} failing)" if failing else name)
|
|
111
|
+
if red and "safety-net" not in found:
|
|
112
|
+
found["safety-net"] = ("tests-exist", f"the ratchet quarantines the test suite of {', '.join(red)}")
|
|
113
|
+
if not CONSTITUTION.is_file() or PLACEHOLDER.search(CONSTITUTION.read_text(errors="replace")):
|
|
114
|
+
found["constitution"] = ("template", "the constitution is missing or still carries the template's placeholders")
|
|
115
|
+
if not document.get("why"):
|
|
116
|
+
found["strategy"] = ("open", "no `why` is recorded")
|
|
117
|
+
else:
|
|
118
|
+
decided = decided_strategy()
|
|
119
|
+
if decided is None:
|
|
120
|
+
found["strategy"] = ("recommended", "no accepted ADR under docs/adr/ carries a `Strategy:` line")
|
|
121
|
+
elif decided != "leave-it" and not ledger_finished():
|
|
122
|
+
found["strategy"] = ("decided", f"the ADR decides `{decided}` and the retirement ledger does not "
|
|
123
|
+
"read *removed* throughout")
|
|
124
|
+
return found
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def decided_strategy() -> str | None:
|
|
128
|
+
"""The strategy the highest-numbered accepted ADR names, or None."""
|
|
129
|
+
decided = None
|
|
130
|
+
for path in sorted((DELIVERY / "docs/adr").glob("*.md")):
|
|
131
|
+
text = path.read_text(errors="replace")
|
|
132
|
+
spelled = [match.group(1).lower() for match in ADR_STRATEGY.finditer(text)]
|
|
133
|
+
named = [OLD_STRATEGIES.get(name, name) for name in spelled]
|
|
134
|
+
strategy = next((name for name in named if name in STRATEGIES), None)
|
|
135
|
+
if strategy and ADR_ACCEPTED.search(text):
|
|
136
|
+
decided = strategy
|
|
137
|
+
return decided
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def ledger_finished() -> bool:
|
|
141
|
+
last: dict[str, str] = {}
|
|
142
|
+
for line in (LEDGER.read_text(errors="replace") if LEDGER.is_file() else "").splitlines():
|
|
143
|
+
cells = [cell.strip() for cell in line.strip().strip("|").split("|")]
|
|
144
|
+
if len(cells) == 7 and cells[0] not in ("Date", "---") and not cells[0].startswith("-"):
|
|
145
|
+
last[cells[1]] = cells[6].strip("*").lower()
|
|
146
|
+
return bool(last) and all(status == "removed" for status in last.values())
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def main() -> int:
|
|
150
|
+
document = json.loads((ROOT / "project.json").read_text())
|
|
151
|
+
rows = document.get("convergence")
|
|
152
|
+
if not isinstance(rows, list) or not rows:
|
|
153
|
+
print("check-convergence: no map recorded — adopted before the map existed; `slipwai adopt --refresh` writes "
|
|
154
|
+
"it")
|
|
155
|
+
return 0
|
|
156
|
+
if not PAGE.is_file():
|
|
157
|
+
print(f"check-convergence: {PAGE.relative_to(ROOT)} is missing; /survey (slipwai adopt --refresh) writes it",
|
|
158
|
+
file=sys.stderr)
|
|
159
|
+
return 1
|
|
160
|
+
marker = MARKER.search(PAGE.read_text())
|
|
161
|
+
expected = hashlib.sha256(json.dumps(rows, sort_keys=True).encode()).hexdigest()[:16]
|
|
162
|
+
if marker is None or marker.group(1) != expected:
|
|
163
|
+
print(
|
|
164
|
+
f"check-convergence: {PAGE.relative_to(ROOT)} is stale — project.json's convergence rows changed and the "
|
|
165
|
+
"page was not regenerated; run /survey (slipwai adopt --refresh) and commit both.", file=sys.stderr,
|
|
166
|
+
)
|
|
167
|
+
return 1
|
|
168
|
+
capped = caps(document)
|
|
169
|
+
failures = 0
|
|
170
|
+
for row in rows:
|
|
171
|
+
axis, rung = row.get("axis"), row.get("rung")
|
|
172
|
+
if axis not in RUNGS or rung not in RUNGS[axis]:
|
|
173
|
+
print(f"check-convergence: {axis}: `{rung}` is not a rung this factory knows", file=sys.stderr)
|
|
174
|
+
failures += 1
|
|
175
|
+
continue
|
|
176
|
+
if row.get("provenance") == "unrecorded":
|
|
177
|
+
print(f" {axis}: `{rung}` — unrecorded: nothing has established it; /drive asks before the first slice")
|
|
178
|
+
continue
|
|
179
|
+
cap = capped.get(axis)
|
|
180
|
+
if cap and RUNGS[axis].index(rung) > RUNGS[axis].index(cap[0]):
|
|
181
|
+
print(
|
|
182
|
+
f"check-convergence: {axis} is recorded at `{rung}` ({row.get('provenance')}), but {cap[1]} — the tree "
|
|
183
|
+
f"allows `{cap[0]}` at most. Establish the rung, or record where it stands.", file=sys.stderr,
|
|
184
|
+
)
|
|
185
|
+
failures += 1
|
|
186
|
+
continue
|
|
187
|
+
mark = "at target" if rung == row.get("target") else f"below `{row.get('target')}`"
|
|
188
|
+
print(f" {axis}: `{rung}` — {mark}" + (f"; planned as {row['planned']}" if row.get("planned") else ""))
|
|
189
|
+
# Said, not failed: a strangler fig decided with nowhere for a capability to move to. The first strangler
|
|
190
|
+
# adoption archived five product slices, all built in the WAR it had decided to strangle, with an empty ledger.
|
|
191
|
+
deployables = document.get("deployables") or {}
|
|
192
|
+
if decided_strategy() == "strangler-fig" and not ledger_finished() and deployables and all(
|
|
193
|
+
not (record or {}).get("generated") for record in deployables.values()
|
|
194
|
+
):
|
|
195
|
+
archived = len([path for path in (ROOT / "specs").glob("*/slices/*") if path.is_dir()])
|
|
196
|
+
print(
|
|
197
|
+
f" strategy: `strangler-fig` is decided, {archived} slice(s) are archived, the retirement ledger "
|
|
198
|
+
"reads *removed* for nothing, and every deployable is one that was here — nothing has moved to a new "
|
|
199
|
+
"home. A product slice under a strangler lands in a new home (`add-service`, then `/strangle`); the "
|
|
200
|
+
"Plan stage of /drive has the rule."
|
|
201
|
+
)
|
|
202
|
+
at = sum(1 for r in rows if r.get("rung") == r.get("target"))
|
|
203
|
+
print(f"check-convergence: {at} of {len(rows)} axes at target; the map is {PAGE.relative_to(ROOT)}")
|
|
204
|
+
return 1 if failures else 0
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
if __name__ == "__main__":
|
|
208
|
+
raise SystemExit(main())
|