genesis-stack 1.2.0 → 1.3.0

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 CHANGED
@@ -39,7 +39,7 @@ catalog dependency.
39
39
 
40
40
  With Genesis 1.4 or newer, `genesis templates list` also lists the JSKIT starters
41
41
  in `genesis.templates.json`. Both variants come from
42
- [vibe64-dev/seed-jskit](https://github.com/vibe64-dev/seed-jskit):
42
+ the [JSKIT seed repository](https://github.com/vibe64-dev/seed-jskit):
43
43
  `official:jskit/public` and `official:jskit/accounts`. Apply one to an empty
44
44
  Git/Genesis bootstrap project with `genesis templates apply <id>`. Template IDs
45
45
  name complete applications; selecting a Skill never silently chooses a starter.
@@ -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 Vibe64's optional `Resource estimates` section for its concrete
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. Vibe64 owns the grammar and a host owns admission, learned consumption
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.
@@ -71,7 +71,7 @@ policy. Neither the catalog nor the project stores host observations or limits.
71
71
 
72
72
  ## Connected package defaults
73
73
 
74
- Each package-ecosystem language piece proposes Vibe64's opaque
74
+ Each package-ecosystem language piece proposes a host's opaque
75
75
  `Connected development` section containing only
76
76
  `- Default package type: \`<type>\``:
77
77
 
@@ -96,15 +96,16 @@ leaves the section as a project decision: `genesis stack add` succeeds, reports
96
96
  `STACK_SECTION_AMBIGUOUS` with each proposal, and the project authors one
97
97
  section choosing its default.
98
98
 
99
- Vibe64 can inspect this default without treating it as a prepared development
100
- recipe. The project must add its real source-map, preparation and verification
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
101
  declarations before connected development can run; no repositories or commands
102
102
  are inferred from selecting a language. A project-owned section wins unchanged,
103
103
  including an explicit different default.
104
104
 
105
105
  For an existing current-format project whose selected catalog gains this
106
- proposal, Genesis reports `STACK_PROJECT_CONTRACTS_INCOMPLETE` if the project
107
- section is missing. Explicitly reconcile the already-selected Stack with
106
+ proposal, the Stack still reads normally and Genesis reports the missing
107
+ section as a pending proposal (`STACK_SECTION_PROPOSALS_PENDING`) until it is
108
+ adopted. Explicitly reconcile the already-selected Stack with
108
109
  `genesis stack add <component>`, then review the materialized contract. Older project
109
110
  formats use the normal `genesis migrate` workflow. Catalog updates never install
110
111
  a hidden runtime default or rewrite an existing project section.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genesis-stack",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "The optional curated technology Stack catalog for Genesis projects.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -28,8 +28,8 @@ 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 `## Connected development` section declares Vibe64's default
32
- connected package type, `nuget`. It does not declare repositories or
31
+ - The proposed host-owned `## Connected development` section names `nuget` as
32
+ the default package type. It does not declare repositories or
33
33
  executable preparation. When connected development is needed, preserve that
34
34
  default in the complete project-owned section and declare the application's
35
35
  real Sources file and Prepare/Verify commands. An explicit `custom` connection
@@ -43,6 +43,10 @@ C# namespace, public type, dependency, lifecycle, and test conventions.
43
43
  enters a NuGet cache. Do not restore in locked mode while connected. Verify
44
44
  that `obj/project.assets.json` resolves each package as a project at its
45
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`.
46
50
 
47
51
  ## Connected development
48
52
 
@@ -28,8 +28,8 @@ 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 `## Connected development` section declares Vibe64's default
32
- connected package type, `gomod`. It does not declare repositories or
31
+ - The proposed host-owned `## Connected development` section names `gomod` as
32
+ the default package type. It does not declare repositories or
33
33
  executable preparation. When connected development is needed, preserve that
34
34
  default in the complete project-owned section and declare the application's
35
35
  real Sources file and Prepare/Verify commands. An explicit `custom` connection
@@ -41,6 +41,10 @@ Go package, exported callable, interface, concurrency, resource, and test conven
41
41
  and `go.sum` stay unchanged. Verify `go env GOWORK` and that
42
42
  `go list -deps ./...` loads each connected module from its source root, then
43
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.
44
48
 
45
49
  ## Connected development
46
50
 
@@ -28,8 +28,8 @@ 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 `## Connected development` section declares Vibe64's default
32
- connected package type, `maven`. It does not declare repositories or
31
+ - The proposed host-owned `## Connected development` section names `maven` as
32
+ the default package type. It does not declare repositories or
33
33
  executable preparation. When connected development is needed, preserve that
34
34
  default in the complete project-owned section and declare the application's
35
35
  real Sources file and Prepare/Verify commands. An explicit `custom` connection
@@ -44,6 +44,10 @@ Java package, public type, dependency, lifecycle, and test conventions.
44
44
  unchanged. Verify resolves the classpath through Maven and requires the jar
45
45
  to match the checkout's freshly built one. Run Prepare again after editing
46
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`.
47
51
 
48
52
  ## Connected development
49
53
 
@@ -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 authenticated Preview exists, preserve the app-owned Preview identity
90
- command, selectors, protocol, environment names, runtime, and timeout in the
91
- project's Outputs declaration. A host-saved identity name/value is not a
92
- substitute for this application contract.
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 Vibe64-owned Resource estimates proposal against the application's
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
@@ -28,8 +28,8 @@ 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 `## Connected development` section declares Vibe64's default
32
- connected package type, `gradle`. It does not declare repositories or
31
+ - The proposed host-owned `## Connected development` section names `gradle` as
32
+ the default package type. It does not declare repositories or
33
33
  executable preparation. When connected development is needed, preserve that
34
34
  default in the complete project-owned section and declare the application's
35
35
  real Sources file and Prepare/Verify commands. An explicit `custom` connection
@@ -42,6 +42,10 @@ Kotlin package, public callable, coroutine, nullability, build, and test convent
42
42
  the included build from source, so no tracked settings or lockfiles change.
43
43
  Verify resolves `runtimeClasspath` and requires each connected artifact to
44
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`.
45
49
 
46
50
  ## Connected development
47
51
 
@@ -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. Add the exact
55
- `php artisan migrate` or production `php artisan migrate --force` operation
56
- to the applicable project contract only when that consumer owns executing it.
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. Add the exact
55
- `php artisan migrate` or production `php artisan migrate --force` operation
56
- to the applicable project contract only when that consumer owns executing it.
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 the application's
46
- migrations and seeders, and declare their exact commands in the project setup
47
- and deployment contracts. Repeated setup must preserve records, the migration
48
- ledger, and the existing application key; do not use `migrate:fresh` or
49
- regenerate keys as routine preparation.
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
 
@@ -20,6 +20,31 @@ 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. The proposed
37
+ host-owned `## Deployment` section follows that order and serves through
38
+ `php artisan serve` on the supplied `HOST` and `PORT`, PHP's single-process
39
+ built-in server. Replace its Serve step with the application's production
40
+ server (for example Octane or FrankenPHP) when real traffic needs one.
41
+ - Behind a local reverse proxy, trust only its loopback address (Laravel 11+:
42
+ `$middleware->trustProxies(at: ['127.0.0.1', '::1'])` in
43
+ `bootstrap/app.php`; older versions: `TrustProxies::$proxies`) so `url()`,
44
+ `asset()` and redirects use the forwarded scheme, host and port. Set
45
+ `APP_URL` for console-generated URLs. A stale `public/hot` makes `@vite`
46
+ point at a stopped development server: delete it when `npm run dev` is not
47
+ running.
23
48
 
24
49
  - When application integrations are requested or `integrations.json` exists,
25
50
  read the application-owned file and the selected provider's supplied static
@@ -46,8 +71,8 @@ conventions. Authoritative framework documentation: https://laravel.com/docs/
46
71
  never accept an administrator flag from JSON. Keep commands usable from an
47
72
  ordinary CLI outside the editor. Verify with native tests and controlled
48
73
  provider fixtures; no Node or JSKIT runtime is required for integrations.
49
- - The proposed `## Connected development` section declares Vibe64's default
50
- connected package type, `composer`; because Laravel requires `php` and
74
+ - The proposed host-owned `## Connected development` section names `composer` as
75
+ the default package type; because Laravel requires `php` and
51
76
  `nodejs`, it supersedes their proposals. It does not declare repositories or
52
77
  executable preparation. When connected development is needed, preserve that
53
78
  default in the complete project-owned section and declare the application's
@@ -81,6 +106,7 @@ conventions. Authoritative framework documentation: https://laravel.com/docs/
81
106
  ## Workspace setup
82
107
 
83
108
  - Prepare `Install PHP dependencies` with `php` when `composer.json` exists: `composer` `install` `--no-interaction`
109
+ - Prepare `Migrate database` with `php` when `artisan` exists: `php` `artisan` `migrate` `--force` `--no-interaction`
84
110
  - Prepare `Install frontend dependencies` with `nodejs` when `package.json` exists: `npm` `install`
85
111
  - Prepare `Build frontend assets` with `nodejs` when `package.json` exists: `npm` `run` `build`
86
112
 
@@ -104,6 +130,17 @@ conventions. Authoritative framework documentation: https://laravel.com/docs/
104
130
 
105
131
  - Verify `application`: `php` `artisan` `test`
106
132
 
133
+ ## Deployment
134
+
135
+ - Runtimes: `php` `nodejs`
136
+ - Recreate on restore: `vendor` `node_modules`
137
+ - Ready when: `GET` `/up` returns `200`
138
+ - Prepare `Install PHP dependencies`: `composer` `install` `--no-dev` `--optimize-autoloader` `--no-interaction`
139
+ - Prepare `Install frontend dependencies`: `npm` `ci`
140
+ - Build `Build frontend assets`: `npm` `run` `build`
141
+ - Migrate `Migrate database`: `php` `artisan` `migrate` `--force` `--no-interaction`
142
+ - Serve `Serve`: `sh` `-c` `exec php artisan serve --host="$HOST" --port="$PORT"`
143
+
107
144
  ## Connected development
108
145
 
109
146
  - Default package type: `composer`
@@ -28,8 +28,8 @@ 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
- - The proposed `## Connected development` section declares Vibe64's default
32
- 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
33
33
  preparation. When connected development is needed, preserve that default in
34
34
  the complete project-owned section and declare the application's real source
35
35
  map, preparation and verification commands. An explicit `custom` connection
@@ -41,6 +41,9 @@ Node.js package, command, module, dependency, and test conventions.
41
41
  `package.json` and `package-lock.json` stay unchanged; Verify resolves each
42
42
  package from the application root and fails unless it resolves to its
43
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.
44
47
 
45
48
  ## Adoption
46
49
 
@@ -64,7 +67,8 @@ Node.js package, command, module, dependency, and test conventions.
64
67
  `npm test`, or `npm start` exists merely because a current foundation uses it.
65
68
  - Identify every long-running process, its workdir, host/port handling,
66
69
  readiness signal, and shutdown ownership before declaring Outputs.
67
- - For Vibe64's optional Resource estimates, distinguish dependency preparation,
70
+ - For a host's optional `## Resource estimates` section (an opaque section
71
+ whose grammar belongs to that host), distinguish dependency preparation,
68
72
  startup/build, and the ready runtime of each real declared output. For an
69
73
  unmeasured Node web development target, initial planning candidates are
70
74
  startup 1024 MiB typical / 1536 MiB high and running 768 MiB typical / 1536 MiB
@@ -28,8 +28,8 @@ 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 `## Connected development` section declares Vibe64's default
32
- connected package type, `composer`. It does not declare repositories or
31
+ - The proposed host-owned `## Connected development` section names `composer` as
32
+ the default package type. It does not declare repositories or
33
33
  executable preparation. When connected development is needed, preserve that
34
34
  default in the complete project-owned section and declare the application's
35
35
  real Sources file and Prepare/Verify commands. An explicit `custom` connection
@@ -42,6 +42,9 @@ PHP package, namespace, callable, dependency, and test conventions.
42
42
  `COMPOSER=<derived manifest> composer update <connected packages>`. The
43
43
  tracked `composer.json` and `composer.lock` stay unchanged. Verify checks
44
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.
45
48
 
46
49
  ## Connected development
47
50
 
@@ -28,8 +28,8 @@ 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 `## Connected development` section declares Vibe64's default
32
- connected package type, `pip`. It does not declare repositories or executable
31
+ - The proposed host-owned `## Connected development` section names `pip` as
32
+ the default package type. It does not declare repositories or executable
33
33
  preparation. When connected development is needed, preserve that default in
34
34
  the complete project-owned section and declare the application's real Sources
35
35
  file and Prepare/Verify commands. An explicit `custom` connection uses its
@@ -42,6 +42,13 @@ Python package, module, callable, dependency, and test conventions.
42
42
  PEP 610 `direct_url.json` is editable with the source root's `file:` URL and
43
43
  that its modules import from there. Do not use `uv sync`, which needs tracked
44
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`.
45
52
 
46
53
  ## Connected development
47
54
 
@@ -28,8 +28,8 @@ 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 `## Connected development` section declares Vibe64's default
32
- connected package type, `bundler`. It does not declare repositories or
31
+ - The proposed host-owned `## Connected development` section names `bundler` as
32
+ the default package type. It does not declare repositories or
33
33
  executable preparation. When connected development is needed, preserve that
34
34
  default in the complete project-owned section and declare the application's
35
35
  real Sources file and Prepare/Verify commands. An explicit `custom` connection
@@ -43,6 +43,12 @@ Ruby module, class, callable, dependency, lifecycle, and test conventions.
43
43
  Launch through `bundle exec` or export `BUNDLE_GEMFILE`: a plain
44
44
  `require "bundler/setup"` launch ignores that setting. `local.<gem>` covers
45
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.
46
52
 
47
53
  ## Connected development
48
54
 
@@ -28,8 +28,8 @@ 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 `## Connected development` section declares Vibe64's default
32
- connected package type, `cargo`. It does not declare repositories or
31
+ - The proposed host-owned `## Connected development` section names `cargo` as
32
+ the default package type. It does not declare repositories or
33
33
  executable preparation. When connected development is needed, preserve that
34
34
  default in the complete project-owned section and declare the application's
35
35
  real Sources file and Prepare/Verify commands. An explicit `custom` connection
@@ -42,6 +42,10 @@ Rust module, public item, ownership, error, async, Cargo, and test conventions.
42
42
  lockfile. This requires Cargo 1.97 or later. Verify with
43
43
  `cargo metadata --locked` that each crate resolves from its source root with
44
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.
45
49
 
46
50
  ## Connected development
47
51
 
@@ -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 Vibe64 Resource estimates in the project's existing complete
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.