genesis-stack 1.1.6 → 1.2.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 +37 -13
- package/package.json +1 -1
- package/stacks/pieces/cpp.md +13 -0
- package/stacks/pieces/csharp.md +23 -0
- package/stacks/pieces/go.md +21 -0
- package/stacks/pieces/java.md +24 -0
- package/stacks/pieces/jskit.md +15 -5
- package/stacks/pieces/kotlin.md +22 -0
- package/stacks/pieces/laravel-mysql.md +4 -3
- package/stacks/pieces/laravel-postgresql.md +4 -3
- package/stacks/pieces/laravel-sqlite.md +8 -5
- package/stacks/pieces/laravel.md +42 -0
- package/stacks/pieces/nodejs.md +16 -6
- package/stacks/pieces/php.md +21 -0
- package/stacks/pieces/python.md +25 -0
- package/stacks/pieces/ruby.md +25 -0
- package/stacks/pieces/rust.md +22 -0
- package/stacks/pieces/shell.md +5 -0
- package/stacks/pieces/vue.md +7 -1
package/README.md
CHANGED
|
@@ -56,10 +56,10 @@ own schema changes and preservation of existing data during adoption.
|
|
|
56
56
|
|
|
57
57
|
## Resource-estimate proposals
|
|
58
58
|
|
|
59
|
-
JSKIT proposes
|
|
59
|
+
JSKIT proposes a host's optional `Resource estimates` section for its concrete
|
|
60
60
|
`app` output and Workspace setup. The startup, running and preparation values
|
|
61
61
|
are initial planning estimates, not measured minima, reservations or memory
|
|
62
|
-
limits.
|
|
62
|
+
limits. The consuming host owns the grammar, admission, learned consumption
|
|
63
63
|
and owner settings; Genesis only materializes and transports the exact text.
|
|
64
64
|
|
|
65
65
|
Node and Vue contribute adoption guidance without competing section proposals.
|
|
@@ -69,18 +69,42 @@ Projects with different output ids or commands must review the proposal during
|
|
|
69
69
|
preparation. A project can omit estimates and use its host's generic starting
|
|
70
70
|
policy. Neither the catalog nor the project stores host observations or limits.
|
|
71
71
|
|
|
72
|
-
## Connected package
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
## Connected package defaults
|
|
73
|
+
|
|
74
|
+
Each package-ecosystem language piece proposes a host's opaque
|
|
75
|
+
`Connected development` section containing only
|
|
76
|
+
`- Default package type: \`<type>\``:
|
|
77
|
+
|
|
78
|
+
| Piece | Default |
|
|
79
|
+
| --- | --- |
|
|
80
|
+
| `nodejs` | `npm` |
|
|
81
|
+
| `php` | `composer` |
|
|
82
|
+
| `python` | `pip` |
|
|
83
|
+
| `ruby` | `bundler` |
|
|
84
|
+
| `go` | `gomod` |
|
|
85
|
+
| `rust` | `cargo` |
|
|
86
|
+
| `java` | `maven` |
|
|
87
|
+
| `kotlin` | `gradle` |
|
|
88
|
+
| `csharp` | `nuget` |
|
|
89
|
+
| `laravel` | `composer` |
|
|
90
|
+
|
|
91
|
+
Laravel requires `php` and `nodejs`, so its proposal supersedes theirs; npm
|
|
92
|
+
front-end repositories can still declare an explicit `npm` type per connection.
|
|
93
|
+
`cpp` and `shell` propose no default: their connections use an explicit
|
|
94
|
+
`custom` type with a project script. Selecting several unrelated languages
|
|
95
|
+
leaves the section as a project decision: `genesis stack add` succeeds, reports
|
|
96
|
+
`STACK_SECTION_AMBIGUOUS` with each proposal, and the project authors one
|
|
97
|
+
section choosing its default.
|
|
98
|
+
|
|
99
|
+
A host can inspect this default without treating it as a prepared development
|
|
100
|
+
recipe; the consuming host owns the grammar. The project must add its real source-map, preparation and verification
|
|
101
|
+
declarations before connected development can run; no repositories or commands
|
|
102
|
+
are inferred from selecting a language. A project-owned section wins unchanged,
|
|
103
|
+
including an explicit different default.
|
|
104
|
+
|
|
105
|
+
For an existing current-format project whose selected catalog gains this
|
|
82
106
|
proposal, Genesis reports `STACK_PROJECT_CONTRACTS_INCOMPLETE` if the project
|
|
83
107
|
section is missing. Explicitly reconcile the already-selected Stack with
|
|
84
|
-
`genesis stack add
|
|
108
|
+
`genesis stack add <component>`, then review the materialized contract. Older project
|
|
85
109
|
formats use the normal `genesis migrate` workflow. Catalog updates never install
|
|
86
110
|
a hidden runtime default or rewrite an existing project section.
|
package/package.json
CHANGED
package/stacks/pieces/cpp.md
CHANGED
|
@@ -38,6 +38,19 @@ C and C++ translation-unit, header, callable, ownership, build, and test convent
|
|
|
38
38
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
39
39
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
40
40
|
Native implementation remains required; guidance is not a working connector.
|
|
41
|
+
- This component has no package-ecosystem default and proposes no
|
|
42
|
+
`## Connected development` section. A connection it consumes should use an
|
|
43
|
+
explicit `custom` type with a project-defined script, for example a CMake
|
|
44
|
+
build that uses the connected source. When a project selects several
|
|
45
|
+
languages, its own complete `## Connected development` section chooses the
|
|
46
|
+
one default.
|
|
47
|
+
- A proven custom treatment for CMake FetchContent: the project script
|
|
48
|
+
configures an untracked build tree with
|
|
49
|
+
`-DFETCHCONTENT_SOURCE_DIR_<UPPERNAME>=<source root>`, so `CMakeLists.txt`
|
|
50
|
+
stays unchanged, and verifies from `compile_commands.json` that the
|
|
51
|
+
dependency's sources come from the connected checkout rather than a
|
|
52
|
+
`_deps/*-src` download. The project owns the repository-to-dependency name
|
|
53
|
+
mapping.
|
|
41
54
|
|
|
42
55
|
## Adoption
|
|
43
56
|
|
package/stacks/pieces/csharp.md
CHANGED
|
@@ -28,6 +28,29 @@ C# namespace, public type, dependency, lifecycle, and test conventions.
|
|
|
28
28
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
29
29
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
30
30
|
Native implementation remains required; guidance is not a working connector.
|
|
31
|
+
- The proposed host-owned `## Connected development` section names `nuget` as
|
|
32
|
+
the default package type. It does not declare repositories or
|
|
33
|
+
executable preparation. When connected development is needed, preserve that
|
|
34
|
+
default in the complete project-owned section and declare the application's
|
|
35
|
+
real Sources file and Prepare/Verify commands. An explicit `custom` connection
|
|
36
|
+
uses its project-defined script instead of `nuget` treatment. Do not invent a
|
|
37
|
+
working recipe from the component name.
|
|
38
|
+
- A proven NuGet treatment: Prepare writes an untracked, Git-excluded
|
|
39
|
+
`Directory.Build.targets` beside each consuming project that replaces the
|
|
40
|
+
connected `PackageReference` with a `ProjectReference` to the checkout's
|
|
41
|
+
project and moves the restore lock under `obj/`, so project files,
|
|
42
|
+
`nuget.config` and `packages.lock.json` stay unchanged and no shadow package
|
|
43
|
+
enters a NuGet cache. Do not restore in locked mode while connected. Verify
|
|
44
|
+
that `obj/project.assets.json` resolves each package as a project at its
|
|
45
|
+
source root.
|
|
46
|
+
- Running a web process: bind the supplied listen host and port, trust forwarded
|
|
47
|
+
headers only from a loopback proxy, and read secrets from the environment.
|
|
48
|
+
ASP.NET Core: call `UseForwardedHeaders` with the loopback addresses in
|
|
49
|
+
`KnownProxies`, and take the listen URL from `ASPNETCORE_URLS` or `--urls`.
|
|
50
|
+
|
|
51
|
+
## Connected development
|
|
52
|
+
|
|
53
|
+
- Default package type: `nuget`
|
|
31
54
|
|
|
32
55
|
## Deslop
|
|
33
56
|
|
package/stacks/pieces/go.md
CHANGED
|
@@ -28,6 +28,27 @@ Go package, exported callable, interface, concurrency, resource, and test conven
|
|
|
28
28
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
29
29
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
30
30
|
Native implementation remains required; guidance is not a working connector.
|
|
31
|
+
- The proposed host-owned `## Connected development` section names `gomod` as
|
|
32
|
+
the default package type. It does not declare repositories or
|
|
33
|
+
executable preparation. When connected development is needed, preserve that
|
|
34
|
+
default in the complete project-owned section and declare the application's
|
|
35
|
+
real Sources file and Prepare/Verify commands. An explicit `custom` connection
|
|
36
|
+
uses its project-defined script instead of `gomod` treatment. Do not invent a
|
|
37
|
+
working recipe from the component name.
|
|
38
|
+
- A proven Go modules treatment: Prepare writes an untracked, ignored `go.work`
|
|
39
|
+
at the module root with `use . <source root>...` (also ignore
|
|
40
|
+
`go.work.sum`). Workspace modules replace the required versions, so `go.mod`
|
|
41
|
+
and `go.sum` stay unchanged. Verify `go env GOWORK` and that
|
|
42
|
+
`go list -deps ./...` loads each connected module from its source root, then
|
|
43
|
+
`go build ./...`. Do not set `-mod=mod` or run `go work sync` while connected.
|
|
44
|
+
- Running a web process: bind the supplied listen host and port, trust forwarded
|
|
45
|
+
headers only from a loopback proxy, and read secrets from the environment.
|
|
46
|
+
Take the listen address from an argument or environment variable rather than
|
|
47
|
+
hard-coding it.
|
|
48
|
+
|
|
49
|
+
## Connected development
|
|
50
|
+
|
|
51
|
+
- Default package type: `gomod`
|
|
31
52
|
|
|
32
53
|
## Deslop
|
|
33
54
|
|
package/stacks/pieces/java.md
CHANGED
|
@@ -28,6 +28,30 @@ Java package, public type, dependency, lifecycle, and test conventions.
|
|
|
28
28
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
29
29
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
30
30
|
Native implementation remains required; guidance is not a working connector.
|
|
31
|
+
- The proposed host-owned `## Connected development` section names `maven` as
|
|
32
|
+
the default package type. It does not declare repositories or
|
|
33
|
+
executable preparation. When connected development is needed, preserve that
|
|
34
|
+
default in the complete project-owned section and declare the application's
|
|
35
|
+
real Sources file and Prepare/Verify commands. An explicit `custom` connection
|
|
36
|
+
uses its project-defined script instead of `maven` treatment. Do not invent a
|
|
37
|
+
working recipe from the component name.
|
|
38
|
+
- A proven Maven treatment (Maven 3.9.3+): Prepare installs each connected
|
|
39
|
+
checkout into an untracked project-local repository chained in front of the
|
|
40
|
+
user's, `mvn -f <source root> install -Dmaven.repo.local=<project
|
|
41
|
+
repository> -Dmaven.repo.local.tail=<user repository>`, and writes the same
|
|
42
|
+
two arguments to an ignored `.mvn/maven.config`, so ordinary `mvn` commands
|
|
43
|
+
resolve the connected build under unchanged coordinates and `pom.xml` stays
|
|
44
|
+
unchanged. Verify resolves the classpath through Maven and requires the jar
|
|
45
|
+
to match the checkout's freshly built one. Run Prepare again after editing
|
|
46
|
+
connected source.
|
|
47
|
+
- Running a web process: bind the supplied listen host and port, trust forwarded
|
|
48
|
+
headers only from a loopback proxy, and read secrets from the environment.
|
|
49
|
+
Spring Boot: set `server.address`/`server.port` from the supplied values and
|
|
50
|
+
`server.forward-headers-strategy=framework`.
|
|
51
|
+
|
|
52
|
+
## Connected development
|
|
53
|
+
|
|
54
|
+
- Default package type: `maven`
|
|
31
55
|
|
|
32
56
|
## Deslop
|
|
33
57
|
|
package/stacks/pieces/jskit.md
CHANGED
|
@@ -44,6 +44,14 @@ https://mobily-enterprises.github.io/jskit-ai/
|
|
|
44
44
|
- Keep resource-load and field errors in context, but route transient
|
|
45
45
|
user-command failures through JSKIT's shared non-layout-shifting action
|
|
46
46
|
feedback/snackbar path.
|
|
47
|
+
- When declared, `TEST_DB_NAME` is the exact disposable integration database and
|
|
48
|
+
`BROWSER_TEST_DB_NAME` is a separate reusable browser-fixture database whose
|
|
49
|
+
migration ledger survives routine runs. Never reset `DB_NAME`, share these
|
|
50
|
+
identities, or point a test runner's `DB_NAME` elsewhere to pass safety checks.
|
|
51
|
+
Routine browser-test startup reuses the isolated test schema, applies only
|
|
52
|
+
pending migrations and resets fixtures deterministically; it does not drop or
|
|
53
|
+
rebuild the database or run a production frontend build per check. Keep
|
|
54
|
+
fresh-schema migration checks separate.
|
|
47
55
|
|
|
48
56
|
- When application integrations are requested or `integrations.json` exists,
|
|
49
57
|
treat that file as the application-owned configuration used by both editor
|
|
@@ -86,15 +94,17 @@ https://mobily-enterprises.github.io/jskit-ai/
|
|
|
86
94
|
- Inspect existing setup and database preparation for both migration discovery
|
|
87
95
|
and an app-owned idempotent seed. Never infer `db:prepare` from the selected
|
|
88
96
|
component when the script or preparation file does not exist.
|
|
89
|
-
- When
|
|
90
|
-
command, selectors, protocol, environment names,
|
|
91
|
-
|
|
92
|
-
substitute for this application
|
|
97
|
+
- When the project declares an application-owned identity exchange for a host's
|
|
98
|
+
browser preview, preserve its command, selectors, protocol, environment names,
|
|
99
|
+
runtime and timeout in the project's existing section.
|
|
100
|
+
A host-saved identity name/value is not a substitute for this application
|
|
101
|
+
contract.
|
|
93
102
|
- Treat generator descriptors, receipts, sync commands, legacy service
|
|
94
103
|
locators, and retired tool manifests as migration evidence only. Translate
|
|
95
104
|
live facts into current source/Stack and report remaining port work; do not
|
|
96
105
|
add compatibility readers or claim adoption performed the port.
|
|
97
|
-
- Review the
|
|
106
|
+
- Review the proposed `## Resource estimates` section (a host-owned opaque
|
|
107
|
+
section whose grammar belongs to the consuming host) against the application's
|
|
98
108
|
actual Outputs target ids and Workspace setup. Its initial Node development
|
|
99
109
|
estimates are planning hints, not measured requirements, hard memory limits,
|
|
100
110
|
or a promise of available capacity. Keep startup/build and ready runtime
|
package/stacks/pieces/kotlin.md
CHANGED
|
@@ -28,6 +28,28 @@ Kotlin package, public callable, coroutine, nullability, build, and test convent
|
|
|
28
28
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
29
29
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
30
30
|
Native implementation remains required; guidance is not a working connector.
|
|
31
|
+
- The proposed host-owned `## Connected development` section names `gradle` as
|
|
32
|
+
the default package type. It does not declare repositories or
|
|
33
|
+
executable preparation. When connected development is needed, preserve that
|
|
34
|
+
default in the complete project-owned section and declare the application's
|
|
35
|
+
real Sources file and Prepare/Verify commands. An explicit `custom` connection
|
|
36
|
+
uses its project-defined script instead of `gradle` treatment. Do not invent a
|
|
37
|
+
working recipe from the component name.
|
|
38
|
+
- A proven Gradle treatment: Prepare writes an ignored init script, such as
|
|
39
|
+
`.development/connected.init.gradle.kts`, containing
|
|
40
|
+
`settingsEvaluated { includeBuild("<source root>") }`, and connected launches
|
|
41
|
+
pass `-I <init script>`; Gradle substitutes the matching `group:name` with
|
|
42
|
+
the included build from source, so no tracked settings or lockfiles change.
|
|
43
|
+
Verify resolves `runtimeClasspath` and requires each connected artifact to
|
|
44
|
+
come from an included build inside its source root.
|
|
45
|
+
- Running a web process: bind the supplied listen host and port, trust forwarded
|
|
46
|
+
headers only from a loopback proxy, and read secrets from the environment.
|
|
47
|
+
Spring Boot: set `server.address`/`server.port` from the supplied values and
|
|
48
|
+
`server.forward-headers-strategy=framework`.
|
|
49
|
+
|
|
50
|
+
## Connected development
|
|
51
|
+
|
|
52
|
+
- Default package type: `gradle`
|
|
31
53
|
|
|
32
54
|
## Deslop
|
|
33
55
|
|
|
@@ -51,9 +51,10 @@ Laravel MySQL connection, migration, Eloquent, and database environment conventi
|
|
|
51
51
|
|
|
52
52
|
## Guidance
|
|
53
53
|
|
|
54
|
-
- Use Laravel's application-owned migrations and seeders.
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
- Use Laravel's application-owned migrations and seeders. The laravel piece's
|
|
55
|
+
proposed setup runs `php artisan migrate`; production deployment runs
|
|
56
|
+
`php artisan migrate --force` in its migration step. Never use routine
|
|
57
|
+
`migrate:fresh`.
|
|
57
58
|
- Keep the project Resource contract aligned with `config/database.php` if the
|
|
58
59
|
application deliberately changes Laravel's conventional environment names.
|
|
59
60
|
|
|
@@ -51,9 +51,10 @@ Laravel PostgreSQL connection, migration, Eloquent, and database environment con
|
|
|
51
51
|
|
|
52
52
|
## Guidance
|
|
53
53
|
|
|
54
|
-
- Use Laravel's application-owned migrations and seeders.
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
- Use Laravel's application-owned migrations and seeders. The laravel piece's
|
|
55
|
+
proposed setup runs `php artisan migrate`; production deployment runs
|
|
56
|
+
`php artisan migrate --force` in its migration step. Never use routine
|
|
57
|
+
`migrate:fresh`.
|
|
57
58
|
- Keep the project Resource contract aligned with `config/database.php` if the
|
|
58
59
|
application deliberately changes Laravel's conventional environment names.
|
|
59
60
|
|
|
@@ -42,11 +42,14 @@ Laravel SQLite connection, migration, and database filename conventions.
|
|
|
42
42
|
with any application-specific names. Laravel expects an absolute filename;
|
|
43
43
|
preserve a host-supplied value. For standalone setup, create the selected file
|
|
44
44
|
only if absent and configure its absolute path before migration.
|
|
45
|
-
- Verify the selected PHP runtime includes `pdo_sqlite`. Use
|
|
46
|
-
migrations and seeders
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
- Verify the selected PHP runtime includes `pdo_sqlite`. Use Laravel's
|
|
46
|
+
application-owned migrations and seeders. The laravel piece's proposed setup
|
|
47
|
+
runs `php artisan migrate`; production deployment runs
|
|
48
|
+
`php artisan migrate --force` in its migration step. Never use routine
|
|
49
|
+
`migrate:fresh`. `migrate --no-interaction` creates a missing SQLite file at
|
|
50
|
+
the configured absolute path. Repeated setup must preserve records, the
|
|
51
|
+
migration ledger, and the application key supplied through the environment
|
|
52
|
+
(see laravel); do not regenerate keys as routine preparation.
|
|
50
53
|
- Consult the installed Laravel version's SQLite configuration documentation at
|
|
51
54
|
`https://laravel.com/docs/database#sqlite-configuration`.
|
|
52
55
|
|
package/stacks/pieces/laravel.md
CHANGED
|
@@ -20,6 +20,27 @@ conventions. Authoritative framework documentation: https://laravel.com/docs/
|
|
|
20
20
|
values and secrets outside Git.
|
|
21
21
|
- Use Laravel's built-in `/up` health route unless the application deliberately
|
|
22
22
|
changes it and updates its project Outputs contract.
|
|
23
|
+
- `APP_KEY` is required. Generate it once with
|
|
24
|
+
`php artisan key:generate --show` and supply it through the environment
|
|
25
|
+
facility as a secret. Never commit it, and never run `key:generate` without
|
|
26
|
+
`--show` against a generated or shared environment file. Rotating it
|
|
27
|
+
invalidates sessions and encrypted data.
|
|
28
|
+
- The proposed Workspace setup runs `php artisan migrate --force` after Composer
|
|
29
|
+
installation. Setup never uses `migrate:fresh`; development sets
|
|
30
|
+
`APP_ENV=local`.
|
|
31
|
+
- A production deployment runs, in order:
|
|
32
|
+
`composer install --no-dev --optimize-autoloader --no-interaction`,
|
|
33
|
+
`npm ci` and `npm run build`, optionally `php artisan config:cache` and
|
|
34
|
+
`php artisan route:cache`, then `php artisan migrate --force`, then serves the
|
|
35
|
+
application on the listen address the host supplies. Readiness is `/up`;
|
|
36
|
+
`vendor` and `node_modules` are recreated rather than restored.
|
|
37
|
+
- Behind a local reverse proxy, trust only its loopback address (Laravel 11+:
|
|
38
|
+
`$middleware->trustProxies(at: ['127.0.0.1', '::1'])` in
|
|
39
|
+
`bootstrap/app.php`; older versions: `TrustProxies::$proxies`) so `url()`,
|
|
40
|
+
`asset()` and redirects use the forwarded scheme, host and port. Set
|
|
41
|
+
`APP_URL` for console-generated URLs. A stale `public/hot` makes `@vite`
|
|
42
|
+
point at a stopped development server: delete it when `npm run dev` is not
|
|
43
|
+
running.
|
|
23
44
|
|
|
24
45
|
- When application integrations are requested or `integrations.json` exists,
|
|
25
46
|
read the application-owned file and the selected provider's supplied static
|
|
@@ -46,6 +67,22 @@ conventions. Authoritative framework documentation: https://laravel.com/docs/
|
|
|
46
67
|
never accept an administrator flag from JSON. Keep commands usable from an
|
|
47
68
|
ordinary CLI outside the editor. Verify with native tests and controlled
|
|
48
69
|
provider fixtures; no Node or JSKIT runtime is required for integrations.
|
|
70
|
+
- The proposed host-owned `## Connected development` section names `composer` as
|
|
71
|
+
the default package type; because Laravel requires `php` and
|
|
72
|
+
`nodejs`, it supersedes their proposals. It does not declare repositories or
|
|
73
|
+
executable preparation. When connected development is needed, preserve that
|
|
74
|
+
default in the complete project-owned section and declare the application's
|
|
75
|
+
real Sources file and Prepare/Verify commands. An npm front-end repository can
|
|
76
|
+
set an explicit `npm` type for its connection, and an explicit `custom`
|
|
77
|
+
connection uses its project-defined script. Do not invent a working recipe
|
|
78
|
+
from the component name.
|
|
79
|
+
- A proven Composer treatment: Prepare writes an untracked derived manifest,
|
|
80
|
+
such as `composer.connected.json`, that adds a first `path` repository
|
|
81
|
+
(`symlink: true`, locked version pinned) for each connected source, copies
|
|
82
|
+
`composer.lock` to the matching derived lock and runs
|
|
83
|
+
`COMPOSER=<derived manifest> composer update <connected packages>`. The
|
|
84
|
+
tracked `composer.json` and `composer.lock` stay unchanged. Verify checks
|
|
85
|
+
`InstalledVersions::getInstallPath()` against each source root.
|
|
49
86
|
|
|
50
87
|
## Adoption
|
|
51
88
|
|
|
@@ -65,6 +102,7 @@ conventions. Authoritative framework documentation: https://laravel.com/docs/
|
|
|
65
102
|
## Workspace setup
|
|
66
103
|
|
|
67
104
|
- Prepare `Install PHP dependencies` with `php` when `composer.json` exists: `composer` `install` `--no-interaction`
|
|
105
|
+
- Prepare `Migrate database` with `php` when `artisan` exists: `php` `artisan` `migrate` `--force` `--no-interaction`
|
|
68
106
|
- Prepare `Install frontend dependencies` with `nodejs` when `package.json` exists: `npm` `install`
|
|
69
107
|
- Prepare `Build frontend assets` with `nodejs` when `package.json` exists: `npm` `run` `build`
|
|
70
108
|
|
|
@@ -88,6 +126,10 @@ conventions. Authoritative framework documentation: https://laravel.com/docs/
|
|
|
88
126
|
|
|
89
127
|
- Verify `application`: `php` `artisan` `test`
|
|
90
128
|
|
|
129
|
+
## Connected development
|
|
130
|
+
|
|
131
|
+
- Default package type: `composer`
|
|
132
|
+
|
|
91
133
|
## Deslop
|
|
92
134
|
|
|
93
135
|
- Preserve Laravel's container, providers, middleware, policies, requests,
|
package/stacks/pieces/nodejs.md
CHANGED
|
@@ -28,16 +28,25 @@ Node.js package, command, module, dependency, and test conventions.
|
|
|
28
28
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
29
29
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
30
30
|
Native implementation remains required; guidance is not a working connector.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- The proposed `## Connected development` section declares Vibe64's default
|
|
35
|
-
connected package type, `npm`. It does not declare repositories or executable
|
|
31
|
+
- The proposed host-owned `## Connected development` section names `npm` as
|
|
32
|
+
the default package type. It does not declare repositories or executable
|
|
36
33
|
preparation. When connected development is needed, preserve that default in
|
|
37
34
|
the complete project-owned section and declare the application's real source
|
|
38
35
|
map, preparation and verification commands. An explicit `custom` connection
|
|
39
36
|
uses its project-defined script instead of npm treatment. Do not invent a
|
|
40
37
|
working recipe from the component name.
|
|
38
|
+
- A proven npm treatment: Prepare runs
|
|
39
|
+
`npm install --no-save --install-links=false <source root>...` for the
|
|
40
|
+
connected dependencies, which links each checkout into `node_modules` while
|
|
41
|
+
`package.json` and `package-lock.json` stay unchanged; Verify resolves each
|
|
42
|
+
package from the application root and fails unless it resolves to its
|
|
43
|
+
connected source root. An ordinary `npm ci` restores the published packages.
|
|
44
|
+
- Long-running web processes accept their listen host and port from arguments
|
|
45
|
+
or the environment rather than hard-coding them, and fail if the port is
|
|
46
|
+
taken instead of silently choosing another.
|
|
47
|
+
|
|
48
|
+
## Adoption
|
|
49
|
+
|
|
41
50
|
- Identify the package manager from the lockfile and preserve the existing
|
|
42
51
|
module system, supported Node.js version, package entrypoints, and executable
|
|
43
52
|
commands.
|
|
@@ -58,7 +67,8 @@ Node.js package, command, module, dependency, and test conventions.
|
|
|
58
67
|
`npm test`, or `npm start` exists merely because a current foundation uses it.
|
|
59
68
|
- Identify every long-running process, its workdir, host/port handling,
|
|
60
69
|
readiness signal, and shutdown ownership before declaring Outputs.
|
|
61
|
-
- For
|
|
70
|
+
- For a host's optional `## Resource estimates` section (an opaque section
|
|
71
|
+
whose grammar belongs to that host), distinguish dependency preparation,
|
|
62
72
|
startup/build, and the ready runtime of each real declared output. For an
|
|
63
73
|
unmeasured Node web development target, initial planning candidates are
|
|
64
74
|
startup 1024 MiB typical / 1536 MiB high and running 768 MiB typical / 1536 MiB
|
package/stacks/pieces/php.md
CHANGED
|
@@ -28,6 +28,27 @@ PHP package, namespace, callable, dependency, and test conventions.
|
|
|
28
28
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
29
29
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
30
30
|
Native implementation remains required; guidance is not a working connector.
|
|
31
|
+
- The proposed host-owned `## Connected development` section names `composer` as
|
|
32
|
+
the default package type. It does not declare repositories or
|
|
33
|
+
executable preparation. When connected development is needed, preserve that
|
|
34
|
+
default in the complete project-owned section and declare the application's
|
|
35
|
+
real Sources file and Prepare/Verify commands. An explicit `custom` connection
|
|
36
|
+
uses its project-defined script instead of `composer` treatment. Do not invent
|
|
37
|
+
a working recipe from the component name.
|
|
38
|
+
- A proven Composer treatment: Prepare writes an untracked derived manifest,
|
|
39
|
+
such as `composer.connected.json`, that adds a first `path` repository
|
|
40
|
+
(`symlink: true`, locked version pinned) for each connected source, copies
|
|
41
|
+
`composer.lock` to the matching derived lock and runs
|
|
42
|
+
`COMPOSER=<derived manifest> composer update <connected packages>`. The
|
|
43
|
+
tracked `composer.json` and `composer.lock` stay unchanged. Verify checks
|
|
44
|
+
`InstalledVersions::getInstallPath()` against each source root.
|
|
45
|
+
- Running a web process: bind the supplied listen host and port, trust forwarded
|
|
46
|
+
headers only from a loopback proxy, and read secrets from the environment. The
|
|
47
|
+
built-in server is `php -S <host>:<port> -t public` for development only.
|
|
48
|
+
|
|
49
|
+
## Connected development
|
|
50
|
+
|
|
51
|
+
- Default package type: `composer`
|
|
31
52
|
|
|
32
53
|
## Deslop
|
|
33
54
|
|
package/stacks/pieces/python.md
CHANGED
|
@@ -28,6 +28,31 @@ Python package, module, callable, dependency, and test conventions.
|
|
|
28
28
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
29
29
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
30
30
|
Native implementation remains required; guidance is not a working connector.
|
|
31
|
+
- The proposed host-owned `## Connected development` section names `pip` as
|
|
32
|
+
the default package type. It does not declare repositories or executable
|
|
33
|
+
preparation. When connected development is needed, preserve that default in
|
|
34
|
+
the complete project-owned section and declare the application's real Sources
|
|
35
|
+
file and Prepare/Verify commands. An explicit `custom` connection uses its
|
|
36
|
+
project-defined script instead of `pip` treatment. Do not invent a working
|
|
37
|
+
recipe from the component name.
|
|
38
|
+
- A proven pip treatment: install into an untracked virtual environment in one
|
|
39
|
+
resolution, `pip install -r <requirements> -e <source root>...` (or uv's
|
|
40
|
+
`uv pip install --python .venv/bin/python ...`), so each editable checkout
|
|
41
|
+
satisfies the application's own requirement. Verify that each package's
|
|
42
|
+
PEP 610 `direct_url.json` is editable with the source root's `file:` URL and
|
|
43
|
+
that its modules import from there. Do not use `uv sync`, which needs tracked
|
|
44
|
+
`[tool.uv.sources]` and lockfile changes.
|
|
45
|
+
- Running a web process: bind the supplied listen host and port, trust forwarded
|
|
46
|
+
headers only from a loopback proxy, and read secrets from the environment.
|
|
47
|
+
Django: set `ALLOWED_HOSTS` and `CSRF_TRUSTED_ORIGINS` for the served origin
|
|
48
|
+
(`ALLOWED_HOSTS` also lists the loopback host the proxy connects to),
|
|
49
|
+
`SECURE_PROXY_SSL_HEADER` and `USE_X_FORWARDED_HOST` only behind that trusted
|
|
50
|
+
proxy, and read `SECRET_KEY` from the environment. Flask uses Werkzeug's
|
|
51
|
+
`ProxyFix`; Uvicorn uses `--proxy-headers --forwarded-allow-ips 127.0.0.1`.
|
|
52
|
+
|
|
53
|
+
## Connected development
|
|
54
|
+
|
|
55
|
+
- Default package type: `pip`
|
|
31
56
|
|
|
32
57
|
## Deslop
|
|
33
58
|
|
package/stacks/pieces/ruby.md
CHANGED
|
@@ -28,6 +28,31 @@ Ruby module, class, callable, dependency, lifecycle, and test conventions.
|
|
|
28
28
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
29
29
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
30
30
|
Native implementation remains required; guidance is not a working connector.
|
|
31
|
+
- The proposed host-owned `## Connected development` section names `bundler` as
|
|
32
|
+
the default package type. It does not declare repositories or
|
|
33
|
+
executable preparation. When connected development is needed, preserve that
|
|
34
|
+
default in the complete project-owned section and declare the application's
|
|
35
|
+
real Sources file and Prepare/Verify commands. An explicit `custom` connection
|
|
36
|
+
uses its project-defined script instead of `bundler` treatment. Do not invent
|
|
37
|
+
a working recipe from the component name.
|
|
38
|
+
- A proven Bundler treatment: Prepare writes an untracked `Gemfile.connected`
|
|
39
|
+
that switches each connected gem to `path: <source root>` and then
|
|
40
|
+
`eval_gemfile`s the tracked Gemfile, seeds `Gemfile.connected.lock` from
|
|
41
|
+
`Gemfile.lock`, and selects it with `bundle config set --local gemfile
|
|
42
|
+
Gemfile.connected`. The tracked `Gemfile` and `Gemfile.lock` stay unchanged.
|
|
43
|
+
Launch through `bundle exec` or export `BUNDLE_GEMFILE`: a plain
|
|
44
|
+
`require "bundler/setup"` launch ignores that setting. `local.<gem>` covers
|
|
45
|
+
only git sources. Verify that each spec loads from its source root.
|
|
46
|
+
- Running a web process: bind the supplied listen host and port, trust forwarded
|
|
47
|
+
headers only from a loopback proxy, and read secrets from the environment.
|
|
48
|
+
Rails: allow the served host and the proxy's loopback host in `config.hosts`
|
|
49
|
+
(Rails honours `X-Forwarded-Host`), read `SECRET_KEY_BASE` from the
|
|
50
|
+
environment (generate it with `bin/rails secret`), and use
|
|
51
|
+
`bin/rails db:prepare` for setup.
|
|
52
|
+
|
|
53
|
+
## Connected development
|
|
54
|
+
|
|
55
|
+
- Default package type: `bundler`
|
|
31
56
|
|
|
32
57
|
## Deslop
|
|
33
58
|
|
package/stacks/pieces/rust.md
CHANGED
|
@@ -28,6 +28,28 @@ Rust module, public item, ownership, error, async, Cargo, and test conventions.
|
|
|
28
28
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
29
29
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
30
30
|
Native implementation remains required; guidance is not a working connector.
|
|
31
|
+
- The proposed host-owned `## Connected development` section names `cargo` as
|
|
32
|
+
the default package type. It does not declare repositories or
|
|
33
|
+
executable preparation. When connected development is needed, preserve that
|
|
34
|
+
default in the complete project-owned section and declare the application's
|
|
35
|
+
real Sources file and Prepare/Verify commands. An explicit `custom` connection
|
|
36
|
+
uses its project-defined script instead of `cargo` treatment. Do not invent a
|
|
37
|
+
working recipe from the component name.
|
|
38
|
+
- A proven Cargo treatment: Prepare writes an untracked, ignored
|
|
39
|
+
`.cargo/config.toml` with `[patch.crates-io]` (or `[patch."<git url>"]`)
|
|
40
|
+
`<crate> = { path = "<source root>" }` and `resolver.lockfile-path` pointing
|
|
41
|
+
at an untracked copy of `Cargo.lock`; a patch otherwise rewrites the tracked
|
|
42
|
+
lockfile. This requires Cargo 1.97 or later. Verify with
|
|
43
|
+
`cargo metadata --locked` that each crate resolves from its source root with
|
|
44
|
+
no registry source, then `cargo build --locked`.
|
|
45
|
+
- Running a web process: bind the supplied listen host and port, trust forwarded
|
|
46
|
+
headers only from a loopback proxy, and read secrets from the environment.
|
|
47
|
+
Take the listen address from an argument or environment variable rather than
|
|
48
|
+
hard-coding it.
|
|
49
|
+
|
|
50
|
+
## Connected development
|
|
51
|
+
|
|
52
|
+
- Default package type: `cargo`
|
|
31
53
|
|
|
32
54
|
## Deslop
|
|
33
55
|
|
package/stacks/pieces/shell.md
CHANGED
|
@@ -28,6 +28,11 @@ Shell script function, process, environment, portability, and test conventions.
|
|
|
28
28
|
supplied `extensions.payments` semantics and verify signatures, deduplication,
|
|
29
29
|
entitlement transitions and transactional credits using controlled fixtures.
|
|
30
30
|
Native implementation remains required; guidance is not a working connector.
|
|
31
|
+
- This component has no package-ecosystem default and proposes no
|
|
32
|
+
`## Connected development` section. A connection it consumes should use an
|
|
33
|
+
explicit `custom` type with a project-defined script. When a project selects
|
|
34
|
+
several languages, its own complete `## Connected development` section
|
|
35
|
+
chooses the one default.
|
|
31
36
|
|
|
32
37
|
## Deslop
|
|
33
38
|
|
package/stacks/pieces/vue.md
CHANGED
|
@@ -29,6 +29,12 @@ conventions. Authoritative framework documentation: https://vuejs.org/
|
|
|
29
29
|
the subject and verifies webhooks. A successful browser redirect is not proof
|
|
30
30
|
of payment. Preserve drafts, focus, pending/error states and selected accounts
|
|
31
31
|
across responsive changes; use the project's established resource composables.
|
|
32
|
+
- Start the Vite development server on the supplied address with
|
|
33
|
+
`--host <host> --port <port> --strictPort`. Behind a proxy that rewrites Host
|
|
34
|
+
to loopback, keep Vite's default `allowedHosts` and HMR client settings; the
|
|
35
|
+
HMR client connects through the page's own origin. Do not set
|
|
36
|
+
`allowedHosts: true` or hard-code `server.hmr.host`, `clientPort` or `origin`
|
|
37
|
+
unless that proxy requires it.
|
|
32
38
|
|
|
33
39
|
### Reactive state hydration
|
|
34
40
|
|
|
@@ -48,5 +54,5 @@ conventions. Authoritative framework documentation: https://vuejs.org/
|
|
|
48
54
|
working host-managed browser contract during adoption.
|
|
49
55
|
- Attribute a Vue build/dev server's memory to its actual Node output target.
|
|
50
56
|
Vue selection does not create a second service or another memory charge.
|
|
51
|
-
Review any
|
|
57
|
+
Review any host-owned Resource estimates in the project's existing complete
|
|
52
58
|
section; this piece does not propose a competing section alongside a framework.
|