@greenpandastudios/aug-cli 0.19.0 → 0.20.1
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.
- package/README.md +9 -6
- package/THIRD_PARTY_NOTICES.md +4 -0
- package/bin/aug.mjs +12 -2
- package/docs/about.md +27 -0
- package/docs/api/crypto.md +103 -69
- package/docs/api/io.md +35 -33
- package/docs/api/json.md +3 -3
- package/docs/api/memory.md +23 -19
- package/docs/api/time.md +10 -9
- package/docs/api/web.md +33 -38
- package/docs/compatibility.md +3 -3
- package/docs/contributing-benchmarks.md +38 -0
- package/docs/dev-containers.md +95 -0
- package/docs/diagnostics.md +15 -5
- package/docs/docker.md +174 -12
- package/docs/editor.md +35 -0
- package/docs/example-projects.json +206 -24
- package/docs/examples/approved-design/counters.md +34 -126
- package/docs/examples/approved-design/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/approved-design/domain/app.md +13 -77
- package/docs/examples/approved-design/domain/export.md +5 -19
- package/docs/examples/approved-design/domain/models.md +4 -23
- package/docs/examples/approved-design/domain/numbers.md +24 -114
- package/docs/examples/approved-design/index.md +16 -7
- package/docs/examples/approved-design/main.md +19 -96
- package/docs/examples/benchmark/index.md +6 -5
- package/docs/examples/benchmark/main.md +7 -35
- package/docs/examples/cli-args/index.md +6 -5
- package/docs/examples/cli-args/main.md +6 -31
- package/docs/examples/collections/index.md +6 -5
- package/docs/examples/collections/main.md +7 -35
- package/docs/examples/collections-benchmark/index.md +6 -5
- package/docs/examples/collections-benchmark/main.md +7 -35
- package/docs/examples/cpu-benchmark/index.md +6 -5
- package/docs/examples/cpu-benchmark/main.md +5 -24
- package/docs/examples/developer-workflow/calculator.md +39 -186
- package/docs/examples/developer-workflow/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/developer-workflow/index.md +16 -7
- package/docs/examples/developer-workflow/logging/console.md +10 -56
- package/docs/examples/developer-workflow/logging/export.md +4 -14
- package/docs/examples/developer-workflow/logging/logger.md +7 -43
- package/docs/examples/developer-workflow/main.md +17 -69
- package/docs/examples/drop/index.md +6 -5
- package/docs/examples/drop/main.md +7 -27
- package/docs/examples/drop/resource.md +7 -30
- package/docs/examples/errors/errors.md +7 -27
- package/docs/examples/errors/index.md +6 -5
- package/docs/examples/errors/main.md +7 -28
- package/docs/examples/ffi/index.md +6 -5
- package/docs/examples/ffi/main.md +6 -20
- package/docs/examples/ffi/native.md +8 -34
- package/docs/examples/generic-di/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/generic-di/index.md +6 -5
- package/docs/examples/generic-di/main.md +9 -39
- package/docs/examples/generic-di/types.md +23 -92
- package/docs/examples/generics/index.md +6 -5
- package/docs/examples/generics/main.md +10 -47
- package/docs/examples/generics/types.md +25 -100
- package/docs/examples/hello/app/export.md +4 -12
- package/docs/examples/hello/app/greeter.md +13 -91
- package/docs/examples/hello/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/hello/index.md +17 -6
- package/docs/examples/hello/logging/console.md +10 -54
- package/docs/examples/hello/logging/export.md +4 -14
- package/docs/examples/hello/logging/logger.md +7 -45
- package/docs/examples/hello/main.md +9 -39
- package/docs/examples/http-benchmark/index.md +6 -5
- package/docs/examples/http-benchmark/main.md +6 -20
- package/docs/examples/http-benchmark/routes.md +9 -31
- package/docs/examples/index.md +46 -29
- package/docs/examples/interceptors/app.md +20 -139
- package/docs/examples/interceptors/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/interceptors/index.md +6 -5
- package/docs/examples/interceptors/interceptors.md +24 -148
- package/docs/examples/interceptors/logging.md +13 -76
- package/docs/examples/interceptors/main.md +10 -65
- package/docs/examples/json-benchmark/data.md +4 -20
- package/docs/examples/json-benchmark/dependencies/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +67 -0
- package/docs/examples/json-benchmark/index.md +7 -5
- package/docs/examples/json-benchmark/main-yaml.md +20 -0
- package/docs/examples/json-benchmark/main.md +10 -49
- package/docs/examples/new-syntax/console.md +10 -52
- package/docs/examples/new-syntax/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/new-syntax/greeter.md +13 -71
- package/docs/examples/new-syntax/index.md +6 -5
- package/docs/examples/new-syntax/logger.md +7 -43
- package/docs/examples/new-syntax/main.md +10 -53
- package/docs/examples/new-syntax/math.md +6 -24
- package/docs/examples/oidc-login/client/contracts.md +10 -61
- package/docs/examples/oidc-login/client/endpoints.md +32 -154
- package/docs/examples/oidc-login/client/export.md +5 -23
- package/docs/examples/oidc-login/client/login.md +234 -344
- package/docs/examples/oidc-login/client/logout.md +38 -143
- package/docs/examples/oidc-login/client/protocol.md +183 -304
- package/docs/examples/oidc-login/client/session.md +41 -149
- package/docs/examples/oidc-login/client/views.md +13 -58
- package/docs/examples/oidc-login/common/export.md +6 -26
- package/docs/examples/oidc-login/common/headers.md +42 -72
- package/docs/examples/oidc-login/common/keys.md +40 -164
- package/docs/examples/oidc-login/common/settings.md +24 -40
- package/docs/examples/oidc-login/common/views.md +7 -28
- package/docs/examples/oidc-login/dependencies/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.md +205 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +67 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +267 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md +415 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.md +271 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +89 -0
- package/docs/examples/oidc-login/index.md +8 -7
- package/docs/examples/oidc-login/main-yaml.md +7 -0
- package/docs/examples/oidc-login/main.md +26 -153
- package/docs/examples/oidc-login/provider/authorization.md +232 -275
- package/docs/examples/oidc-login/provider/contracts.md +24 -146
- package/docs/examples/oidc-login/provider/credentials.md +24 -57
- package/docs/examples/oidc-login/provider/discovery.md +48 -122
- package/docs/examples/oidc-login/provider/export.md +11 -37
- package/docs/examples/oidc-login/provider/token.md +159 -237
- package/docs/examples/oidc-login/provider/userinfo.md +47 -102
- package/docs/examples/oidc-login/provider/views.md +13 -53
- package/docs/examples/ownership/counter.md +17 -63
- package/docs/examples/ownership/index.md +6 -5
- package/docs/examples/ownership/main.md +7 -30
- package/docs/examples/ownership-transfer/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/ownership-transfer/index.md +6 -5
- package/docs/examples/ownership-transfer/main.md +10 -52
- package/docs/examples/ownership-transfer/resource.md +15 -67
- package/docs/examples/packages-app/dependencies/packages/@example/aug-math/0.1.0/arithmetic.md +12 -50
- package/docs/examples/packages-app/index.md +7 -6
- package/docs/examples/packages-app/main.md +7 -25
- package/docs/examples/packages-math/aug-package-json.md +1 -1
- package/docs/examples/packages-math/index.md +7 -6
- package/docs/examples/packages-math/src/arithmetic.md +12 -50
- package/docs/examples/packages-math/src/export.md +4 -12
- package/docs/examples/startup-benchmark/index.md +6 -5
- package/docs/examples/startup-benchmark/main.md +5 -17
- package/docs/examples/visibility/counter.md +19 -67
- package/docs/examples/visibility/index.md +6 -5
- package/docs/examples/visibility/main.md +7 -31
- package/docs/examples/weather-api/forecasts.md +168 -0
- package/docs/examples/weather-api/index.md +42 -0
- package/docs/examples/weather-api/main-yaml.md +21 -0
- package/docs/examples/weather-api/main.md +65 -0
- package/docs/examples.json +10 -0
- package/docs/getting-started.md +105 -2
- package/docs/grammar.md +6 -4
- package/docs/guides/change-a-module.md +64 -0
- package/docs/guides/index.md +27 -0
- package/docs/index.md +51 -29
- package/docs/language-conformance.md +1 -1
- package/docs/language-constructs.md +22 -22
- package/docs/language-design-audit.md +1 -1
- package/docs/learn/data-and-errors.md +77 -0
- package/docs/learn/index.md +30 -0
- package/docs/learn/modules-and-dependencies.md +73 -0
- package/docs/learn/state-and-tests.md +71 -0
- package/docs/learn/values-and-functions.md +62 -0
- package/docs/lesson-failures.json +8 -0
- package/docs/maintaining-docs.md +16 -4
- package/docs/packages.md +72 -126
- package/docs/performance.md +13 -41
- package/docs/production-readiness.md +5 -4
- package/docs/public/downloads/approved-design.zip +0 -0
- package/docs/public/downloads/benchmark.zip +0 -0
- package/docs/public/downloads/cli-args.zip +0 -0
- package/docs/public/downloads/collections-benchmark.zip +0 -0
- package/docs/public/downloads/collections.zip +0 -0
- package/docs/public/downloads/cpu-benchmark.zip +0 -0
- package/docs/public/downloads/developer-workflow.zip +0 -0
- package/docs/public/downloads/drop.zip +0 -0
- package/docs/public/downloads/errors.zip +0 -0
- package/docs/public/downloads/ffi.zip +0 -0
- package/docs/public/downloads/generic-di.zip +0 -0
- package/docs/public/downloads/generics.zip +0 -0
- package/docs/public/downloads/hello.zip +0 -0
- package/docs/public/downloads/http-benchmark.zip +0 -0
- package/docs/public/downloads/interceptors.zip +0 -0
- package/docs/public/downloads/json-benchmark.zip +0 -0
- package/docs/public/downloads/new-syntax.zip +0 -0
- package/docs/public/downloads/oidc-login.zip +0 -0
- package/docs/public/downloads/ownership-transfer.zip +0 -0
- package/docs/public/downloads/ownership.zip +0 -0
- package/docs/public/downloads/packages-app.zip +0 -0
- package/docs/public/downloads/packages-math.zip +0 -0
- package/docs/public/downloads/startup-benchmark.zip +0 -0
- package/docs/public/downloads/visibility.zip +0 -0
- package/docs/public/downloads/weather-api.zip +0 -0
- package/docs/reference.md +23 -17
- package/docs/releasing.md +29 -15
- package/docs/research/code-to-natural-language.md +108 -0
- package/docs/research/ecosystem-workflow.md +41 -0
- package/docs/research/wiki-editorial-design.md +71 -0
- package/docs/roadmap.md +1 -1
- package/docs/specifications.md +27 -11
- package/docs/testing.md +19 -5
- package/docs/tooling.md +25 -12
- package/docs/weather-api.md +65 -0
- package/docs/web.md +50 -18
- package/docs/writing-docs.md +49 -0
- package/examples/{hello/.aug-spec/august/0.19.0 → approved-design/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
- package/examples/approved-design/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/approved-design/.aug-spec/manifest.json +3 -3
- package/examples/approved-design/counters.aug +5 -4
- package/examples/approved-design/counters.aug.md +25 -132
- package/examples/approved-design/domain/app.aug +2 -1
- package/examples/approved-design/domain/app.aug.md +10 -80
- package/examples/approved-design/domain/export.aug +1 -0
- package/examples/approved-design/domain/export.aug.md +4 -20
- package/examples/approved-design/domain/models.aug +1 -0
- package/examples/approved-design/domain/models.aug.md +3 -25
- package/examples/approved-design/domain/numbers.aug +3 -2
- package/examples/approved-design/domain/numbers.aug.md +19 -116
- package/examples/approved-design/main.aug +1 -0
- package/examples/approved-design/main.aug.md +12 -95
- package/examples/benchmark/.aug-spec/manifest.json +1 -1
- package/examples/benchmark/main.aug +1 -0
- package/examples/benchmark/main.aug.md +6 -36
- package/examples/cli-args/.aug-spec/manifest.json +1 -1
- package/examples/cli-args/main.aug +1 -0
- package/examples/cli-args/main.aug.md +5 -32
- package/examples/collections/.aug-spec/manifest.json +1 -1
- package/examples/collections/main.aug +1 -0
- package/examples/collections/main.aug.md +6 -36
- package/examples/{generic-di/.aug-spec/august/0.19.0 → developer-workflow/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
- package/examples/developer-workflow/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/developer-workflow/.aug-spec/manifest.json +3 -3
- package/examples/developer-workflow/calculator.aug +3 -2
- package/examples/developer-workflow/calculator.aug.md +28 -189
- package/examples/developer-workflow/logging/console.aug +2 -1
- package/examples/developer-workflow/logging/console.aug.md +7 -57
- package/examples/developer-workflow/logging/export.aug +1 -0
- package/examples/developer-workflow/logging/export.aug.md +3 -15
- package/examples/developer-workflow/logging/logger.aug +1 -0
- package/examples/developer-workflow/logging/logger.aug.md +6 -46
- package/examples/developer-workflow/main.aug +1 -0
- package/examples/developer-workflow/main.aug.md +10 -68
- package/examples/drop/.aug-spec/manifest.json +1 -1
- package/examples/drop/main.aug +1 -0
- package/examples/drop/main.aug.md +6 -28
- package/examples/drop/resource.aug +1 -0
- package/examples/drop/resource.aug.md +6 -34
- package/examples/errors/.aug-spec/manifest.json +1 -1
- package/examples/errors/errors.aug +2 -1
- package/examples/errors/errors.aug.md +4 -27
- package/examples/errors/main.aug +1 -0
- package/examples/errors/main.aug.md +6 -29
- package/examples/ffi/.aug-spec/manifest.json +1 -1
- package/examples/ffi/main.aug +1 -0
- package/examples/ffi/main.aug.md +5 -21
- package/examples/ffi/native.aug +2 -1
- package/examples/ffi/native.aug.md +5 -35
- package/examples/{approved-design/.aug-spec/august/0.19.0 → generic-di/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
- package/examples/generic-di/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/generic-di/.aug-spec/manifest.json +3 -3
- package/examples/generic-di/main.aug +1 -0
- package/examples/generic-di/main.aug.md +8 -40
- package/examples/generic-di/types.aug +3 -2
- package/examples/generic-di/types.aug.md +18 -97
- package/examples/generics/.aug-spec/manifest.json +1 -1
- package/examples/generics/main.aug +1 -0
- package/examples/generics/main.aug.md +9 -48
- package/examples/generics/types.aug +4 -3
- package/examples/generics/types.aug.md +18 -104
- package/examples/{developer-workflow/.aug-spec/august/0.19.0 → hello/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
- package/examples/hello/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/hello/.aug-spec/manifest.json +3 -3
- package/examples/hello/app/export.aug +1 -0
- package/examples/hello/app/export.aug.md +3 -13
- package/examples/hello/app/greeter.aug +2 -1
- package/examples/hello/app/greeter.aug.md +10 -94
- package/examples/hello/logging/console.aug +2 -1
- package/examples/hello/logging/console.aug.md +7 -55
- package/examples/hello/logging/export.aug +1 -0
- package/examples/hello/logging/export.aug.md +3 -15
- package/examples/hello/logging/logger.aug +1 -0
- package/examples/hello/logging/logger.aug.md +6 -48
- package/examples/hello/main.aug +1 -0
- package/examples/hello/main.aug.md +8 -40
- package/examples/interceptors/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
- package/examples/interceptors/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/interceptors/.aug-spec/manifest.json +3 -3
- package/examples/interceptors/app.aug +3 -2
- package/examples/interceptors/app.aug.md +15 -141
- package/examples/interceptors/interceptors.aug +3 -2
- package/examples/interceptors/interceptors.aug.md +19 -152
- package/examples/interceptors/logging.aug +2 -1
- package/examples/interceptors/logging.aug.md +10 -79
- package/examples/interceptors/main.aug +1 -0
- package/examples/interceptors/main.aug.md +9 -66
- package/examples/new-syntax/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
- package/examples/new-syntax/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/new-syntax/.aug-spec/manifest.json +3 -3
- package/examples/new-syntax/console.aug +2 -1
- package/examples/new-syntax/console.aug.md +7 -53
- package/examples/new-syntax/greeter.aug +2 -1
- package/examples/new-syntax/greeter.aug.md +10 -74
- package/examples/new-syntax/logger.aug +1 -0
- package/examples/new-syntax/logger.aug.md +6 -46
- package/examples/new-syntax/main.aug +1 -0
- package/examples/new-syntax/main.aug.md +9 -54
- package/examples/new-syntax/math.aug +2 -1
- package/examples/new-syntax/math.aug.md +3 -24
- package/examples/oidc-login/.aug-spec/manifest.json +13 -13
- package/examples/oidc-login/.aug-spec/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.aug.md +71 -0
- package/examples/oidc-login/.aug-spec/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +17 -0
- package/examples/oidc-login/.aug-spec/packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +125 -0
- package/examples/oidc-login/.aug-spec/{august/0.19.0/crypto → packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40}/contracts.aug +12 -11
- package/examples/oidc-login/.aug-spec/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.aug.md +244 -0
- package/examples/oidc-login/.aug-spec/{august/0.19.0/crypto → packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40}/jose.aug +6 -5
- package/examples/oidc-login/.aug-spec/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.aug.md +71 -0
- package/examples/oidc-login/.aug-spec/packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +30 -0
- package/examples/oidc-login/aug.lock.json +100 -0
- package/examples/oidc-login/client/contracts.aug +1 -0
- package/examples/oidc-login/client/contracts.aug.md +9 -66
- package/examples/oidc-login/client/endpoints.aug +6 -5
- package/examples/oidc-login/client/endpoints.aug.md +13 -145
- package/examples/oidc-login/client/export.aug +1 -0
- package/examples/oidc-login/client/export.aug.md +4 -24
- package/examples/oidc-login/client/login.aug +7 -6
- package/examples/oidc-login/client/login.aug.md +25 -303
- package/examples/oidc-login/client/logout.aug +5 -4
- package/examples/oidc-login/client/logout.aug.md +13 -135
- package/examples/oidc-login/client/protocol.aug +7 -6
- package/examples/oidc-login/client/protocol.aug.md +36 -283
- package/examples/oidc-login/client/session.aug +5 -4
- package/examples/oidc-login/client/session.aug.md +12 -139
- package/examples/oidc-login/client/views.aug +3 -2
- package/examples/oidc-login/client/views.aug.md +8 -57
- package/examples/oidc-login/common/export.aug +1 -0
- package/examples/oidc-login/common/export.aug.md +5 -27
- package/examples/oidc-login/common/headers.aug +4 -3
- package/examples/oidc-login/common/headers.aug.md +9 -67
- package/examples/oidc-login/common/keys.aug +6 -5
- package/examples/oidc-login/common/keys.aug.md +29 -165
- package/examples/oidc-login/common/settings.aug +2 -1
- package/examples/oidc-login/common/settings.aug.md +5 -39
- package/examples/oidc-login/common/views.aug +2 -1
- package/examples/oidc-login/common/views.aug.md +4 -28
- package/examples/oidc-login/main.aug +6 -16
- package/examples/oidc-login/main.aug.md +17 -146
- package/examples/oidc-login/main.yaml +7 -0
- package/examples/oidc-login/provider/authorization.aug +7 -6
- package/examples/oidc-login/provider/authorization.aug.md +23 -238
- package/examples/oidc-login/provider/contracts.aug +1 -0
- package/examples/oidc-login/provider/contracts.aug.md +23 -158
- package/examples/oidc-login/provider/credentials.aug +3 -2
- package/examples/oidc-login/provider/credentials.aug.md +9 -53
- package/examples/oidc-login/provider/discovery.aug +4 -3
- package/examples/oidc-login/provider/discovery.aug.md +11 -118
- package/examples/oidc-login/provider/export.aug +1 -0
- package/examples/oidc-login/provider/export.aug.md +6 -34
- package/examples/oidc-login/provider/token.aug +6 -5
- package/examples/oidc-login/provider/token.aug.md +16 -204
- package/examples/oidc-login/provider/userinfo.aug +4 -3
- package/examples/oidc-login/provider/userinfo.aug.md +10 -92
- package/examples/oidc-login/provider/views.aug +3 -2
- package/examples/oidc-login/provider/views.aug.md +8 -52
- package/examples/ownership/.aug-spec/manifest.json +1 -1
- package/examples/ownership/counter.aug +3 -2
- package/examples/ownership/counter.aug.md +12 -66
- package/examples/ownership/main.aug +1 -0
- package/examples/ownership/main.aug.md +6 -31
- package/examples/ownership-transfer/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
- package/examples/ownership-transfer/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/ownership-transfer/.aug-spec/manifest.json +3 -3
- package/examples/ownership-transfer/main.aug +1 -0
- package/examples/ownership-transfer/main.aug.md +9 -53
- package/examples/ownership-transfer/resource.aug +2 -1
- package/examples/ownership-transfer/resource.aug.md +12 -71
- package/examples/packages/app/.aug-spec/manifest.json +1 -1
- package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug +2 -1
- package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug.md +9 -51
- package/examples/packages/app/main.aug +1 -0
- package/examples/packages/app/main.aug.md +6 -26
- package/examples/packages/math/.aug-spec/manifest.json +1 -1
- package/examples/packages/math/aug-package.json +1 -1
- package/examples/packages/math/src/arithmetic.aug +2 -1
- package/examples/packages/math/src/arithmetic.aug.md +9 -51
- package/examples/packages/math/src/export.aug +1 -0
- package/examples/packages/math/src/export.aug.md +3 -13
- package/examples/visibility/.aug-spec/manifest.json +1 -1
- package/examples/visibility/counter.aug +4 -3
- package/examples/visibility/counter.aug.md +12 -68
- package/examples/visibility/main.aug +1 -0
- package/examples/visibility/main.aug.md +6 -32
- package/examples/weather-api/.aug-spec/manifest.json +8 -0
- package/examples/weather-api/AGENTS.md +17 -0
- package/examples/weather-api/README.md +19 -0
- package/examples/weather-api/forecasts.aug +47 -0
- package/examples/weather-api/forecasts.aug.md +32 -0
- package/examples/weather-api/main.aug +4 -0
- package/examples/weather-api/main.aug.md +15 -0
- package/examples/weather-api/main.yaml +5 -0
- package/examples/weather-api/weather.http +5 -0
- package/package.json +3 -4
- package/scripts/bootstrap-native.mjs +181 -106
- package/scripts/native-setup.mjs +98 -0
- package/scripts/native-toolchain.mjs +28 -0
- package/src/builtins.js +1 -1
- package/src/checker.js +259 -72
- package/src/cli.js +114 -20
- package/src/codegen.js +1 -1
- package/src/config.js +1 -1
- package/src/contracts.js +10 -0
- package/src/editor.js +71 -16
- package/src/fixes.js +90 -2
- package/src/formatter.js +19 -8
- package/src/git-packages.js +110 -0
- package/src/help.js +24 -23
- package/src/http-contracts.js +14 -0
- package/src/http-policies.js +5 -5
- package/src/libraries.js +1 -1
- package/src/lsp.js +14 -5
- package/src/native.js +19 -13
- package/src/navigation.js +4 -2
- package/src/openapi.js +5 -4
- package/src/package-locking.js +45 -0
- package/src/package-manager.js +251 -67
- package/src/parser.js +13 -5
- package/src/policies.js +3 -3
- package/src/project-init.js +78 -4
- package/src/project.js +9 -7
- package/src/semantic.js +46 -2
- package/src/snippets.js +59 -0
- package/src/spec-hints.js +56 -0
- package/src/spec-tree.js +241 -0
- package/src/spec.js +626 -303
- package/docs/examples/approved-design/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/developer-workflow/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/generic-di/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/hello/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/interceptors/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/json-benchmark/dependencies/august/0.19.0/json/contracts.md +0 -103
- package/docs/examples/new-syntax/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/contracts.md +0 -925
- package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/jose.md +0 -434
- package/docs/examples/oidc-login/dependencies/august/0.19.0/json/contracts.md +0 -103
- package/docs/examples/oidc-login/dependencies/august/0.19.0/memory/store.md +0 -374
- package/docs/examples/oidc-login/dependencies/august/0.19.0/time/contracts.md +0 -150
- package/docs/examples/oidc-login/dependencies/august/0.19.0/web/contracts.md +0 -532
- package/docs/examples/ownership-transfer/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
- package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
- package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug.md +0 -791
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug.md +0 -266
- package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug.md +0 -55
- package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug.md +0 -250
- package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug.md +0 -96
- package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug.md +0 -420
- package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
- package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/memory → packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/store.aug +0 -0
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/json → packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/web → packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/time → packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "main.aug · Weather API"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/weather-api/main.aug"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
pageClass: aug-example-page
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# `main.aug`
|
|
13
|
+
|
|
14
|
+
[Weather API](index.md) · Source and specification
|
|
15
|
+
|
|
16
|
+
::: details Files in this project
|
|
17
|
+
|
|
18
|
+
- [`main.aug`](main.md)
|
|
19
|
+
- [`forecasts.aug`](forecasts.md)
|
|
20
|
+
|
|
21
|
+
:::
|
|
22
|
+
|
|
23
|
+
::::: example-compare
|
|
24
|
+
|
|
25
|
+
:::: example-code
|
|
26
|
+
|
|
27
|
+
## Code {#code}
|
|
28
|
+
|
|
29
|
+
::: code-group
|
|
30
|
+
|
|
31
|
+
```aug [Indentation]
|
|
32
|
+
// aug-spec: "main.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
33
|
+
import weatherForecast from forecasts
|
|
34
|
+
serve weatherForecast on port 8787
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```aug [Braces]
|
|
38
|
+
// aug-spec: "main.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
39
|
+
import weatherForecast from forecasts
|
|
40
|
+
serve weatherForecast on port 8787
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
:::
|
|
44
|
+
|
|
45
|
+
::::
|
|
46
|
+
|
|
47
|
+
:::: example-spec
|
|
48
|
+
|
|
49
|
+
## Compiled specification {#specification}
|
|
50
|
+
|
|
51
|
+
### HTTP configuration
|
|
52
|
+
|
|
53
|
+
Listen on `127.0.0.1`. Limit request bodies to 1048576 bytes and buffered responses to 4194304 bytes. Serve OpenAPI at `/openapi.json` and API docs at `/docs`.
|
|
54
|
+
|
|
55
|
+
### Startup
|
|
56
|
+
|
|
57
|
+
It serves [`weatherForecast`](forecasts.md#symbol-weatherForecast) on port `8787`.
|
|
58
|
+
|
|
59
|
+
### Dependencies
|
|
60
|
+
|
|
61
|
+
It uses [`weatherForecast`](forecasts.md#symbol-weatherForecast) from `forecasts`.
|
|
62
|
+
|
|
63
|
+
::::
|
|
64
|
+
|
|
65
|
+
:::::
|
package/docs/examples.json
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
"readme": {
|
|
3
3
|
"stdout": "4\n"
|
|
4
4
|
},
|
|
5
|
+
"getting-started": {
|
|
6
|
+
"stdout": "Hello, August!\n",
|
|
7
|
+
"tests": 1
|
|
8
|
+
},
|
|
9
|
+
"wiki-home": {"stdout": "21\n", "tests": 2},
|
|
10
|
+
"book-functions": {"stdout": "21\n0\n"},
|
|
11
|
+
"book-data": {"stdout": "21\nQuantity must be positive\nNo name for this identifier\n"},
|
|
12
|
+
"book-modules": {"stdout": "Hello, August!\n"},
|
|
13
|
+
"book-state": {"stdout": "4\n", "tests": 2},
|
|
5
14
|
"quickstart": {
|
|
6
15
|
"stdout": "Hello, AugScript!\n"
|
|
7
16
|
},
|
|
@@ -40,6 +49,7 @@
|
|
|
40
49
|
"benchmark-collections": {"stdout":"599970000\ntrue\n"},
|
|
41
50
|
"benchmark-json": {"stdout":"250000\n"},
|
|
42
51
|
"benchmark-http": {"buildOnly":true},
|
|
52
|
+
"docker-http": {"buildOnly":true, "tests":1},
|
|
43
53
|
"web-guide": {
|
|
44
54
|
"buildOnly": true,
|
|
45
55
|
"tests": 3
|
package/docs/getting-started.md
CHANGED
|
@@ -1,5 +1,108 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
prev:
|
|
3
|
+
text: The August book
|
|
4
|
+
link: /learn/
|
|
5
|
+
next:
|
|
6
|
+
text: Values and functions
|
|
7
|
+
link: /learn/values-and-functions
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Your first project
|
|
11
|
+
|
|
12
|
+
Build a greeting application, run its test, and read its generated explanation. You will see how an August project starts and how a small module keeps its contract, implementation, and test together.
|
|
13
|
+
|
|
14
|
+
You need Node.js 24 or later and npm. To run native programs, you also need a C11 compiler on macOS or Linux. On macOS, install Xcode Command Line Tools for Clang; on Linux, install a C toolchain.
|
|
15
|
+
|
|
16
|
+
You can run the compiler and native libraries in [a VS Code Dev Container](dev-containers.md) instead of installing a host C toolchain. The [Docker guide](docker.md) covers container builds and deployment.
|
|
17
|
+
|
|
18
|
+
## Create and run the starter
|
|
19
|
+
|
|
20
|
+
Install August once, then create and run the starter:
|
|
2
21
|
|
|
3
22
|
```sh
|
|
4
|
-
|
|
23
|
+
npm install --global @greenpandastudios/aug-cli@next
|
|
24
|
+
aug init hello-august
|
|
25
|
+
cd hello-august
|
|
26
|
+
aug run
|
|
5
27
|
```
|
|
28
|
+
|
|
29
|
+
`init` creates a starter, including `AGENTS.md`, and refuses to replace a nonempty destination. npm supplies the CLI and its core I/O library. `aug run` defaults to the current folder: it checks the project, prepares its dependencies, compiles it, and starts it. The starter needs no additional native libraries. It prints:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
Hello, August!
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Keep the terminal in `hello-august` for the rest of this chapter. When you later use JSON, tasks, crypto, or HTTP, the first run downloads verified native sources and builds the required libraries in a reusable cache. Setup progress goes to the terminal's error stream so it does not become application output. August reports a missing system tool with an installation step; it does not install system software for you. [Packages and installation](packages.md) covers version pinning, offline runs, and the optional `npx` workflow.
|
|
36
|
+
|
|
37
|
+
## Read the startup file
|
|
38
|
+
|
|
39
|
+
The starter's `main.aug` contains its imports, dependency choice, and startup work:
|
|
40
|
+
|
|
41
|
+
```aug project=getting-started file=main.aug
|
|
42
|
+
import Greeter and SimpleGreeter from greeting
|
|
43
|
+
|
|
44
|
+
implement Greeter with SimpleGreeter
|
|
45
|
+
resolve Greeter to greeter
|
|
46
|
+
print(value=greeter.greet(name="August"))
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`main.aug` is the application entry point. It imports two public declarations from the sibling file `greeting.aug`. `implement` selects the provider for `Greeter`, and `resolve` obtains it as `greeter`. The last line asks for a greeting and prints the result.
|
|
50
|
+
|
|
51
|
+
The call labels its input `name`. You can read what the string is for without opening the declaration. Labels also let you reorder inputs when a call has several of them.
|
|
52
|
+
|
|
53
|
+
## Read the module beside it
|
|
54
|
+
|
|
55
|
+
Open `greeting.aug`. These are the important declarations:
|
|
56
|
+
|
|
57
|
+
```aug project=getting-started file=greeting.aug
|
|
58
|
+
/** Build a greeting for a named person. */
|
|
59
|
+
interface Greeter:
|
|
60
|
+
/** Return a greeting for the named person. */
|
|
61
|
+
greet(string name) returns string
|
|
62
|
+
|
|
63
|
+
/** A plain-language greeting. */
|
|
64
|
+
SimpleGreeter() implements Greeter:
|
|
65
|
+
greet(string name):
|
|
66
|
+
return "Hello, " + name + "!"
|
|
67
|
+
|
|
68
|
+
test SimpleGreeter greeter:
|
|
69
|
+
when greetings:
|
|
70
|
+
greeter = SimpleGreeter()
|
|
71
|
+
it greets_a_person:
|
|
72
|
+
assert(greeter.greet(name="August") == "Hello, August!")
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The interface is the caller's contract: give `greet` a string named `name`, and receive a string. `SimpleGreeter` implements that contract. Its constructor has no inputs. The method builds a string and returns it.
|
|
76
|
+
|
|
77
|
+
The test lives beside the class. Its group constructs a greeter, and its case checks an exact result. The comments explain intent and supply editor help. The code describes what happens when the operation runs.
|
|
78
|
+
|
|
79
|
+
## Change the greeting
|
|
80
|
+
|
|
81
|
+
In `main.aug`, change `name="August"` to `name="Ada"`. Run:
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
aug check .
|
|
85
|
+
aug run .
|
|
86
|
+
aug test .
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The application should print `Hello, Ada!`. The existing test should still pass: it constructs its own subject and checks the greeting for August. Application startup does not run during the test.
|
|
90
|
+
|
|
91
|
+
Now deliberately change the call's label from `name` to `person`. `check` should fail because `greet` has no input named `person`. Restore `name` and check again. The checker verifies the contract; the test verifies a behavior you chose to exercise.
|
|
92
|
+
|
|
93
|
+
## Read the generated explanation
|
|
94
|
+
|
|
95
|
+
```sh
|
|
96
|
+
aug spec .
|
|
97
|
+
aug spec . --check
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Open `main.aug.md` and `greeting.aug.md`. They describe the bindings, call, greeting behavior, and test. Their dependency links lead to the used declarations. Generation is deterministic and offline; it does not ask a model to summarize your application.
|
|
101
|
+
|
|
102
|
+
After an edit, regenerate before committing the explanation. `--check` reports stale files and does not write them. [Compiled specifications](specifications.md) explains the full workflow and its limits.
|
|
103
|
+
|
|
104
|
+
## Continue with a calculation
|
|
105
|
+
|
|
106
|
+
You have created, checked, run, tested, and explained an August application. In [Values and functions](learn/values-and-functions.md), you will write a calculation without an injected dependency and learn how labeled shorthand and conditions read.
|
|
107
|
+
|
|
108
|
+
For a service, try [the weather API starter](weather-api.md). You can also [browse complete projects](examples/index.md) with code and actual compiled specs beside each other. The gallery's Indentation and Braces controls display the same checked program in either block style.
|
package/docs/grammar.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Grammar and line boundaries
|
|
2
2
|
|
|
3
|
-
This is the compact accepted grammar for 0.
|
|
3
|
+
This is the compact accepted grammar for 0.20. `Name` is an identifier, and bracketed grammar groups below are optional. These text blocks describe syntax rather than executable snippets.
|
|
4
4
|
|
|
5
5
|
## Blocks and declarations
|
|
6
6
|
|
|
@@ -26,12 +26,12 @@ Interface := ("interface" | "capability") Name [Generics]
|
|
|
26
26
|
Interceptor := "interceptor" Name [Generics] ["(" ResolveFields ")"] Block
|
|
27
27
|
Composition := "composition" Name BlockOfBindings
|
|
28
28
|
Endpoint := [Tags] "endpoint" HttpMethod String "as" Name "(" Parameters ")"
|
|
29
|
-
|
|
29
|
+
["returns" Type | "streams" Type] ["uses" Paths]
|
|
30
30
|
["unless" Type ["with status" Integer] {"and" Type ["with status" Integer]}]
|
|
31
31
|
["with status" Integer] Block
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
An interface/class/interceptor block contains method declarations. A record ends after its header or validation block and has no behavior body.
|
|
34
|
+
An interface/class/interceptor block contains method declarations. A record ends after its header or validation block and has no behavior body. An executable body infers an absent returns clause; no returned value means void. A bodyless signature defaults to void. Omitted changes, uses, and unless clauses are inferred from executable bodies; explicit clauses remain checked bounds. Its body is required for calls, except extern C. There is no class or function prefix.
|
|
35
35
|
|
|
36
36
|
The implements clause identifies a class. Its initialize block appears inside the class before methods, and runs after field initialization. Records can contain one initialize block for validation. Nested function declarations are not supported. A root `counter()` statement is a call, not a declaration.
|
|
37
37
|
|
|
@@ -53,7 +53,7 @@ Variance is accepted only on interfaces; mutable storage applies to class header
|
|
|
53
53
|
## Imports, bindings, and calls
|
|
54
54
|
|
|
55
55
|
```text
|
|
56
|
-
Import := "import" (Name {"and" Name} | "everything") "from" DottedPath End
|
|
56
|
+
Import := "import" (Name {"and" Name} | "everything") "from" (DottedPath | RepositoryUrl {"." Name}) End
|
|
57
57
|
Export := "export" Name "from" SiblingName End
|
|
58
58
|
| "export" "folder" ChildName End
|
|
59
59
|
Binding := "implement" Key ["<" Types ">"] "with" Type
|
|
@@ -64,6 +64,8 @@ Assignment := [["own" | "borrow"] Type] Target ("=" | "to") Expression End
|
|
|
64
64
|
Resolve := "resolve" Key ["<" Types ">"] "to" Name End
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
+
A quoted public repository URL declares a source dependency. A URL can select a tag or commit with #REVISION. See [packages](packages.md) for aliases and commit locks.
|
|
68
|
+
|
|
67
69
|
The formatter uses implement/with and resolve/to, and preserves wildcard imports. Assignment style remains a project preference. Repeated paths/errors can use and or comma; canonical error clauses use and. Collection constructor elements are positional because their order carries meaning. Assert also accepts its single bool positionally.
|
|
68
70
|
|
|
69
71
|
## Control flow and tests
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Change an unfamiliar module
|
|
2
|
+
|
|
3
|
+
A change request is easier to review when you can trace its inputs, dependencies, and observable behavior. This guide follows the repository's tested calculator application. It uses the same process for a human developer and a coding agent; the checks establish specific program properties, while you still review whether the change meets the request.
|
|
4
|
+
|
|
5
|
+
## Establish a working baseline
|
|
6
|
+
|
|
7
|
+
Download [the tested calculator project](../examples/developer-workflow/index.md#try-this-project), extract it, and prepare [the native dependencies](../packages.md#npm-registry). From the folder containing the extracted project:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
cd developer-workflow
|
|
11
|
+
npx @greenpandastudios/aug-cli@next check .
|
|
12
|
+
npx @greenpandastudios/aug-cli@next test .
|
|
13
|
+
npx @greenpandastudios/aug-cli@next spec .
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Open [the application's entry point](../examples/developer-workflow/main.md). It selects the console and logger, constructs the calculator, and calls its addition operation. Then open [the calculator and its compiled spec](../examples/developer-workflow/calculator.md). Its interface describes addition and console output. The class receives a logger. The tests supply a private silent logger and check the returned sums.
|
|
17
|
+
|
|
18
|
+
The private test adapter implements the public logging contract. It keeps these cases independent of console messages. Test setup chooses its own providers; application startup does not run during a case.
|
|
19
|
+
|
|
20
|
+
## Trace only what the change needs
|
|
21
|
+
|
|
22
|
+
Suppose the request is: **also verify addition with a negative operand**. Read the `Arithmetic.add` contract, `Calculator.add`, and the `addition` test group. Follow [the logging contract](../examples/developer-workflow/logging/logger.md) if you need to understand its effect. The dependency section of the compiled spec links to the used surfaces; it does not repeat every dependency implementation.
|
|
23
|
+
|
|
24
|
+
For a bounded context report:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
npx @greenpandastudios/aug-cli@next explain . --file calculator.aug --name Calculator
|
|
28
|
+
npx @greenpandastudios/aug-cli@next context . --file calculator.aug --name Calculator --budget 6000
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The report gives checked contracts and related context. It helps you choose which files to read; it does not establish that the requested behavior is correct. A bounded result can be truncated. Check its `truncated` flag and increase the budget or follow the source links when the required contract is absent.
|
|
32
|
+
|
|
33
|
+
## Make and check the change
|
|
34
|
+
|
|
35
|
+
Add a case to the existing `addition` group. The following is a fragment, not a standalone file:
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
it "adds a negative operand" {
|
|
39
|
+
assert(calculator.add(left=-2, right=5) == 3)
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The existing group setup supplies the calculator and its dependencies. Run `check` and `test` again. The new case should pass without changing the implementation: the current operation already adds integers. If your change needs a new error, dependency, or mutation, update the public contract and its callers deliberately; those decisions belong in the review.
|
|
44
|
+
|
|
45
|
+
## Review the explanation with the patch
|
|
46
|
+
|
|
47
|
+
Regenerate specs after the change:
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
npx @greenpandastudios/aug-cli@next spec .
|
|
51
|
+
npx @greenpandastudios/aug-cli@next spec . --check
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Compare the edited files with the originals, using your editor or source control. The source change adds a behavior case. The spec change should describe that case. Review both and confirm that neither adds an unexpected public export, effect, or dependency. Generated explanations describe checked source; handwritten comments explain domain intent. A passing test covers its exercised inputs, and a current spec is still subject to reader review.
|
|
55
|
+
|
|
56
|
+
## Give a coding agent the same starting point
|
|
57
|
+
|
|
58
|
+
A useful instruction is:
|
|
59
|
+
|
|
60
|
+
> Read `calculator.aug.md` first and follow its linked contracts. Inspect the August source and tests before editing. Add a case that verifies addition with a negative operand. Run `aug check` and `aug test`, regenerate with `aug spec`, and review the source and spec diffs. Report the checks that passed and any limits.
|
|
61
|
+
|
|
62
|
+
Give the agent an explicit instruction to use the neighboring spec and verify its work. This workflow demonstrates the tools; it makes no comparative productivity claim.
|
|
63
|
+
|
|
64
|
+
For a larger boundary example, explore [modules and composition](../examples/approved-design/index.md). For a different task, return to the [guides](index.md).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Guides
|
|
2
|
+
|
|
3
|
+
Choose a guide for the task you are doing. If you are learning August for the first time, start with [the book](../learn/index.md); it introduces the language in order.
|
|
4
|
+
|
|
5
|
+
## Understand and change a project
|
|
6
|
+
|
|
7
|
+
| Task | Guide |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| Review unfamiliar code or an agent's change | [Change a module](change-a-module.md) |
|
|
10
|
+
| Generate and check the neighboring explanations | [Compiled specifications](../specifications.md) |
|
|
11
|
+
| Verify behavior and substitute test dependencies | [Unit tests](../testing.md) |
|
|
12
|
+
| Inspect a diagnostic or find a fix | [Diagnostics](../diagnostics.md) |
|
|
13
|
+
| Use completion, navigation, context, or native builds | [VS Code](../editor.md) and [CLI](../tooling.md) |
|
|
14
|
+
|
|
15
|
+
## Build and distribute an application
|
|
16
|
+
|
|
17
|
+
| Task | Guide |
|
|
18
|
+
| --- | --- |
|
|
19
|
+
| Build your first HTTP service | [Weather API](../weather-api.md) |
|
|
20
|
+
| Add endpoints, pages, streams, or crypto | [Web applications](../web.md) |
|
|
21
|
+
| Create or consume a source library | [Packages](../packages.md#author-a-package) |
|
|
22
|
+
| Build and deploy a Linux application image | [Docker](../docker.md) |
|
|
23
|
+
| Edit, run, and test inside a container | [VS Code Dev Containers](../dev-containers.md) |
|
|
24
|
+
| Measure execution time or HTTP throughput | [Performance](../performance.md) |
|
|
25
|
+
| Assess a trial deployment | [Production readiness](../production-readiness.md) |
|
|
26
|
+
|
|
27
|
+
For exact syntax and contracts, consult the [language reference](../reference.md) and library API pages. [Complete projects](../examples/index.md) show the files, formatted source, and compiled specs together.
|
package/docs/index.md
CHANGED
|
@@ -3,44 +3,66 @@ layout: home
|
|
|
3
3
|
hero:
|
|
4
4
|
name: August
|
|
5
5
|
text: The world runs on language
|
|
6
|
-
tagline: A
|
|
6
|
+
tagline: A programming language for understanding and changing code together—with teammates and coding agents.
|
|
7
7
|
actions:
|
|
8
8
|
- theme: brand
|
|
9
|
-
text:
|
|
10
|
-
link: /
|
|
9
|
+
text: Learn August
|
|
10
|
+
link: /learn/
|
|
11
11
|
- theme: alt
|
|
12
|
-
text:
|
|
13
|
-
link: /
|
|
14
|
-
- theme: alt
|
|
15
|
-
text: Build a web service
|
|
16
|
-
link: /web
|
|
17
|
-
- theme: alt
|
|
18
|
-
text: Browse real projects
|
|
19
|
-
link: /examples/
|
|
20
|
-
- theme: alt
|
|
21
|
-
text: See performance graphs
|
|
22
|
-
link: /performance
|
|
23
|
-
features:
|
|
24
|
-
- title: Understand a module in context
|
|
25
|
-
details: Public exports, labeled inputs, same-file tests, and source comments tell a new reader what the code promises.
|
|
26
|
-
- title: See dependencies and side effects
|
|
27
|
-
details: Interface contracts, resolve parameters, and changes clauses keep behavior visible at the module boundary. Implementation effects are inferred and explained in hover and specs.
|
|
28
|
-
- title: Build native applications
|
|
29
|
-
details: The CLI checks August, emits C11, and invokes the C compiler. First-party HTTP endpoints use narrow native library adapters.
|
|
12
|
+
text: Read a real project
|
|
13
|
+
link: /examples/hello/
|
|
30
14
|
---
|
|
31
15
|
|
|
32
|
-
##
|
|
16
|
+
## Understand the change before you make it
|
|
17
|
+
|
|
18
|
+
A new teammate opens a module. A coding agent receives a change request. Both need to know what the module does, which dependencies it uses, and what a change could affect.
|
|
19
|
+
|
|
20
|
+
August puts that information close to the code. Calls name their inputs. Modules expose a deliberate public surface. Interfaces describe behavior and effects. Tests live beside the declarations they check. The compiler can turn each source file into a linked, readable specification.
|
|
21
|
+
|
|
22
|
+
Here is a complete application. Save these two files in the same folder:
|
|
23
|
+
|
|
24
|
+
**main.aug**
|
|
25
|
+
|
|
26
|
+
```aug project=wiki-home file=main.aug
|
|
27
|
+
import total from prices
|
|
28
|
+
|
|
29
|
+
print(value=total(price=7, quantity=3))
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**prices.aug**
|
|
33
|
+
|
|
34
|
+
```aug project=wiki-home file=prices.aug
|
|
35
|
+
total(int price, int quantity) returns int:
|
|
36
|
+
if quantity > 0:
|
|
37
|
+
return price * quantity
|
|
38
|
+
return 0
|
|
39
|
+
|
|
40
|
+
test total:
|
|
41
|
+
when quantities:
|
|
42
|
+
it calculates_a_total:
|
|
43
|
+
assert(total(price=7, quantity=3) == 21)
|
|
44
|
+
it treats_zero_as_empty:
|
|
45
|
+
assert(total(price=7, quantity=0) == 0)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`aug run .` prints `21`. `aug test .` runs the two cases. `aug spec .` generates an explanation of `total`:
|
|
49
|
+
|
|
50
|
+
> It takes `price` and `quantity` as integers. It returns `price` times `quantity` if `quantity` is positive, or `0` otherwise.
|
|
51
|
+
|
|
52
|
+
The explanation is generated from checked code, offline and deterministically. It links to the dependencies the file uses. Comments can supply the intent that code alone cannot express. [See code and its actual compiled specification](examples/hello/app/greeter.md), or follow [a review of an unfamiliar module](guides/change-a-module.md).
|
|
53
|
+
|
|
54
|
+
## Learn it, then look things up
|
|
33
55
|
|
|
34
|
-
|
|
56
|
+
The [August book](learn/index.md) assumes you already program in another language. It starts with installation and a running application, then introduces values, errors, modules, dependencies, and mutable state. Each chapter gives you a program to run and something to change.
|
|
35
57
|
|
|
36
|
-
|
|
58
|
+
For a specific task, use the [guides](guides/index.md). For a syntax rule or API, use the [language reference](reference.md) and [library reference](api/io.md). The [project gallery](examples/index.md) shows complete applications with code and specifications side by side; you can switch between indentation and braces.
|
|
37
59
|
|
|
38
|
-
##
|
|
60
|
+
## Native programs, measured openly
|
|
39
61
|
|
|
40
|
-
|
|
62
|
+
August checks source, generates C11, and invokes a C compiler to build a native executable. The [performance page](performance.md) publishes the programs, graphs, raw samples, environment, and reproduction commands. Its results describe those workloads on that host. Measure your own application's work before making a performance decision.
|
|
41
63
|
|
|
42
|
-
##
|
|
64
|
+
## A public preview
|
|
43
65
|
|
|
44
|
-
August
|
|
66
|
+
August is experimental and has not reached 1.0. Syntax and package compatibility can change. Tasks currently run cooperatively on one OS thread. HTTP and crypto libraries have working examples and documented operational gaps; the login example is a development demonstration.
|
|
45
67
|
|
|
46
|
-
August is
|
|
68
|
+
Read [what August is designed for](about.md), [production readiness](production-readiness.md), and the [roadmap to 1.0](roadmap.md) before choosing it for a deployment. Installation options are maintained on the [packages page](packages.md). Source and issues are on [GitHub](https://github.com/GreenPandaStudios/augscript); the language repository is MIT licensed, and native dependencies have [their own terms](production-readiness.md#dependencies-and-licenses).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Ownership and task conformance
|
|
2
2
|
|
|
3
|
-
August 0.
|
|
3
|
+
August 0.20 checks ownership before compiling and joins every child before its `scope` ends. This page records the behavior exercised by the [language conformance suite](../tests/language-conformance.test.mjs). It is a candidate 1.0 contract; the [compatibility policy](compatibility.md) takes effect only with a 1.0 release.
|
|
4
4
|
|
|
5
5
|
## What the compiler guarantees
|
|
6
6
|
|
|
@@ -342,7 +342,7 @@ Checked failure for division by zero. int arithmetic otherwise wraps in the sign
|
|
|
342
342
|
around(Type input) returns Type { return next(); }
|
|
343
343
|
```
|
|
344
344
|
|
|
345
|
-
The required entry point of an interceptor. Its parameters select target arguments, and its result must fit the target return type.
|
|
345
|
+
The required entry point of an interceptor. Its parameters select target arguments, and its result must fit the target return type. A forwarding body can omit returns and inherit the target result. It may validate, override mapped arguments, inspect the result, throw a checked error, or return early. Declare generic parameters on the interceptor header. Helper methods can be declared alongside around.
|
|
346
346
|
|
|
347
347
|
## as
|
|
348
348
|
|
|
@@ -426,7 +426,7 @@ Signed 32-bit C int. Convert explicitly with c_int(value=number), which raises C
|
|
|
426
426
|
capability Console { write(string value) uses Console.write }
|
|
427
427
|
```
|
|
428
428
|
|
|
429
|
-
Declare an interface for an external effect. Import the standard Console, FileReader, FileWriter and Arguments contracts from august.io, select adapters in main, and receive them through resolve parameters. Operations
|
|
429
|
+
Declare an interface for an external effect. Import the standard Console, FileReader, FileWriter and Arguments contracts from august.io, select adapters in main, and receive them through resolve parameters. Operations stay visible in inferred hints, hover and specs and can be replaced in tests.
|
|
430
430
|
|
|
431
431
|
## catch
|
|
432
432
|
|
|
@@ -442,7 +442,7 @@ Handle a thrown error from the preceding `try` block. The caught value is availa
|
|
|
442
442
|
increment() changes self
|
|
443
443
|
```
|
|
444
444
|
|
|
445
|
-
|
|
445
|
+
Describe observable mutation of self or a borrowed input. Bodies infer changes when omitted; callers still need mutable access. Bodyless interface contracts declare permitted mutation. Local variables and fresh local objects do not change caller-owned state. An explicit clause limits the body.
|
|
446
446
|
|
|
447
447
|
## class
|
|
448
448
|
|
|
@@ -474,7 +474,7 @@ Negotiate gzip from Accept-Encoding, respecting q=0. Buffered output and each bo
|
|
|
474
474
|
ConversionError implements Error
|
|
475
475
|
```
|
|
476
476
|
|
|
477
|
-
Checked failure when c_int(value=number) cannot fit the signed 32-bit C int range. Catch it or
|
|
477
|
+
Checked failure when c_int(value=number) cannot fit the signed 32-bit C int range. Catch it or let it propagate.
|
|
478
478
|
|
|
479
479
|
## cookie
|
|
480
480
|
|
|
@@ -566,7 +566,7 @@ Inherit methods from one or more interfaces. Class inheritance is not supported.
|
|
|
566
566
|
extern C name(Type arg) returns Type
|
|
567
567
|
```
|
|
568
568
|
|
|
569
|
-
Declare a C function. Calls require unsafe and
|
|
569
|
+
Declare a C function. Calls require unsafe and executable callers infer uses C.name. int maps to int64_t, c_int to signed 32-bit int, float to double, bool to C bool, and string to a temporary UTF-8 const char pointer. Foreign code must respect the declared ABI and cannot retain managed pointers.
|
|
570
570
|
|
|
571
571
|
## false
|
|
572
572
|
|
|
@@ -582,7 +582,7 @@ Boolean false. and and or evaluate the right side only when needed. Conditions r
|
|
|
582
582
|
FileError
|
|
583
583
|
```
|
|
584
584
|
|
|
585
|
-
|
|
585
|
+
Checked failure from text file operations. Catch it or let it propagate.
|
|
586
586
|
|
|
587
587
|
## fixture
|
|
588
588
|
|
|
@@ -654,7 +654,7 @@ Names the source of an import or export. Dotted paths cross folders; each crosse
|
|
|
654
654
|
No function keyword
|
|
655
655
|
```
|
|
656
656
|
|
|
657
|
-
Functions and methods start with their name:
|
|
657
|
+
Functions and methods start with their name: greet(string name) { ... }. Remove the old function prefix. Parameters use Type name order and callers use labels. Bodies infer omitted returns, changes, uses and unless clauses; declarations without a body keep explicit contracts.
|
|
658
658
|
|
|
659
659
|
## handle
|
|
660
660
|
|
|
@@ -750,7 +750,7 @@ Marks a declaration as a class and lists the interfaces it satisfies. Every clas
|
|
|
750
750
|
import Logger and ConsoleLogger from logging
|
|
751
751
|
```
|
|
752
752
|
|
|
753
|
-
Bring public declarations into this file. Use `and` for several names, or `import everything from logging` for all public sibling declarations or folder exports. Imported dependencies are never re-exported implicitly. Names or modules starting with `_` stay private. A sibling module uses its filename without `.aug`; a folder exposes only names listed in `export.aug`.
|
|
753
|
+
Bring public declarations into this file. Use `and` for several names, or `import everything from logging` for all public sibling declarations or folder exports. Imported dependencies are never re-exported implicitly. Names or modules starting with `_` stay private. A sibling module uses its filename without `.aug`; a folder exposes only names listed in `export.aug`. A quoted public repository URL declares a source dependency; `aug run` installs it and locks its commit. Use `aug add URL --as NAME` for a shorter import alias.
|
|
754
754
|
|
|
755
755
|
## in
|
|
756
756
|
|
|
@@ -774,7 +774,7 @@ Expand an explicitly imported composition into the application root. Duplicate b
|
|
|
774
774
|
IndexError implements Error
|
|
775
775
|
```
|
|
776
776
|
|
|
777
|
-
Checked failure for an invalid List.get position. Catch it
|
|
777
|
+
Checked failure for an invalid List.get position. Catch it or let it propagate. List.at returns a value or null instead.
|
|
778
778
|
|
|
779
779
|
## initialize
|
|
780
780
|
|
|
@@ -782,7 +782,7 @@ Checked failure for an invalid List.get position. Catch it, declare unless Index
|
|
|
782
782
|
initialize: ...
|
|
783
783
|
```
|
|
784
784
|
|
|
785
|
-
Run constructor work once after header inputs and local fields are initialized, before returning the class or record. Put this block inside the declaration, before class methods. Construction stays pure. Records can validate inputs and raise
|
|
785
|
+
Run constructor work once after header inputs and local fields are initialized, before returning the class or record. Put this block inside the declaration, before class methods. Construction stays pure. Records can validate inputs and raise checked errors, but cannot replace immutable fields.
|
|
786
786
|
|
|
787
787
|
## input
|
|
788
788
|
|
|
@@ -830,7 +830,7 @@ Define a test case within a when group. Names may be identifiers or quoted descr
|
|
|
830
830
|
Json
|
|
831
831
|
```
|
|
832
832
|
|
|
833
|
-
Immutable JSON data.
|
|
833
|
+
Immutable JSON data. Import parse from the JSON source package, decode concrete records with decode<T>(), and stringify with lossless integer handling.
|
|
834
834
|
|
|
835
835
|
## List
|
|
836
836
|
|
|
@@ -854,7 +854,7 @@ Grant exclusive mutation of Shared<T> for a short block. Waiting, starting tasks
|
|
|
854
854
|
[LogRequest(logger=logger)]
|
|
855
855
|
```
|
|
856
856
|
|
|
857
|
-
Map a resolve RequestLogger parameter and
|
|
857
|
+
Map a resolve RequestLogger parameter and infer its complete operation. Observe the final status and monotonic duration after output finishes, or status 499 on disconnect. Layers complete in reverse written order.
|
|
858
858
|
|
|
859
859
|
## Map
|
|
860
860
|
|
|
@@ -886,7 +886,7 @@ The missing keyword is rejected. Use null. An omitted optional value and an expl
|
|
|
886
886
|
Counter(mutable int initial to _count)
|
|
887
887
|
```
|
|
888
888
|
|
|
889
|
-
Declare mutable class storage. Header fields are otherwise read-only after construction. An explicit public argument label can initialize private storage with Type label to _field.
|
|
889
|
+
Declare mutable class storage. Header fields are otherwise read-only after construction. An explicit public argument label can initialize private storage with Type label to _field. Bodies infer changes self; callers provide mutable access.
|
|
890
890
|
|
|
891
891
|
## next
|
|
892
892
|
|
|
@@ -970,7 +970,7 @@ Bind a required path placeholder by name. A label after the source can select a
|
|
|
970
970
|
print(value=any) returns void
|
|
971
971
|
```
|
|
972
972
|
|
|
973
|
-
|
|
973
|
+
Write application startup or test output. Other callables receive a Console dependency and call console.write; their bodies infer that capability use.
|
|
974
974
|
|
|
975
975
|
## pure
|
|
976
976
|
|
|
@@ -1010,7 +1010,7 @@ Root-only UTF-8 text input. Other callables receive FileReader. Invalid Unicode
|
|
|
1010
1010
|
record Point(int x, int y)
|
|
1011
1011
|
```
|
|
1012
1012
|
|
|
1013
|
-
Declare deeply immutable data with labeled construction and structural equality/hashing. Records contain primitives, tuples and other records. An initialize block validates inputs;
|
|
1013
|
+
Declare deeply immutable data with labeled construction and structural equality/hashing. Records contain primitives, tuples and other records. An initialize block validates inputs; validation infers rejected inputs; an explicit unless ErrorType limits permitted failures.
|
|
1014
1014
|
|
|
1015
1015
|
## request
|
|
1016
1016
|
|
|
@@ -1026,7 +1026,7 @@ Receive the immutable raw request when a protocol requires its own binding and e
|
|
|
1026
1026
|
[RequireLogin(authentication=auth)]
|
|
1027
1027
|
```
|
|
1028
1028
|
|
|
1029
|
-
Verify credentials before typed body decoding. Map auth to an explicit resolve Authentication parameter and
|
|
1029
|
+
Verify credentials before typed body decoding. Map auth to an explicit resolve Authentication parameter and infer its authenticate operation. null produces 401; the adapter validates the credential. HTTP policies precede custom parameter interceptors.
|
|
1030
1030
|
|
|
1031
1031
|
## RequirePermission
|
|
1032
1032
|
|
|
@@ -1058,7 +1058,7 @@ Finish the current function or method and give its result to the caller. A `void
|
|
|
1058
1058
|
name() returns Type
|
|
1059
1059
|
```
|
|
1060
1060
|
|
|
1061
|
-
|
|
1061
|
+
Bodies infer their result from return expressions or their implemented interface when this clause is omitted. No returned value means void. Bodyless signatures still need non-void result types. Explicit result types are checked assertions; returns own Type explicitly transfers ownership. Recursive or ambiguous results may require a type anchor.
|
|
1062
1062
|
|
|
1063
1063
|
## scope
|
|
1064
1064
|
|
|
@@ -1170,7 +1170,7 @@ Declare tests beside the class, function, or endpoint. Class suites initialize t
|
|
|
1170
1170
|
throw error;
|
|
1171
1171
|
```
|
|
1172
1172
|
|
|
1173
|
-
Raise a value whose class implements `Error`.
|
|
1173
|
+
Raise a value whose class implements `Error`. An executable body infers uncaught errors; main must handle them with a matching catch.
|
|
1174
1174
|
|
|
1175
1175
|
## throws
|
|
1176
1176
|
|
|
@@ -1223,10 +1223,10 @@ Fixed immutable positions: `(1, 2)` infers Tuple<int, int>, `(1, "apple")` infer
|
|
|
1223
1223
|
## unless
|
|
1224
1224
|
|
|
1225
1225
|
```text
|
|
1226
|
-
load(bool fail)
|
|
1226
|
+
load(bool fail) unless FileError
|
|
1227
1227
|
```
|
|
1228
1228
|
|
|
1229
|
-
|
|
1229
|
+
Describe checked failures that escape a call. Bodies infer uncaught errors when unless is omitted; catch blocks remove handled errors. Main must handle escaping errors. Bodyless interfaces declare permitted failures. Explicit unless remains an upper bound; unless Error accepts any error type. Record validation can infer its failures too.
|
|
1230
1230
|
|
|
1231
1231
|
## unsafe
|
|
1232
1232
|
|
|
@@ -1239,10 +1239,10 @@ Permit calls to declared `extern C` functions within this block. The compiler do
|
|
|
1239
1239
|
## uses
|
|
1240
1240
|
|
|
1241
1241
|
```text
|
|
1242
|
-
save(resolve FileWriter files, string path)
|
|
1242
|
+
save(resolve FileWriter files, string path)
|
|
1243
1243
|
```
|
|
1244
1244
|
|
|
1245
|
-
|
|
1245
|
+
Bodies infer external capability operations when uses is omitted, including public functions, default methods and interceptor around methods. The editor shows non-editable inline hints; hover, explain, API docs and compiled specs expose checked contracts. Bodyless interfaces and extern declarations keep explicit contracts. An explicit uses clause remains an upper bound. Implementations cannot exceed their interface contract; construction and cleanup stay pure.
|
|
1246
1246
|
|
|
1247
1247
|
## void
|
|
1248
1248
|
|