-
Notifications
You must be signed in to change notification settings - Fork 2
docs: freeze Stellar Wave contributor architecture #94
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,144 @@ | ||
| # StellarForge CLI Contributor Architecture Freeze | ||
|
|
||
| **Status:** Active for Stellar Wave contributor work | ||
|
|
||
| This document freezes the contributor-facing architecture of the post-MVP StellarForge CLI. It does not prevent improvements. It defines which boundaries contributors should extend, which surfaces require maintainer-led design, and how issues must be scoped to avoid parallel-work conflicts. | ||
|
|
||
| ## Stable product surface | ||
|
|
||
| The v1 stabilization command surface is: | ||
|
|
||
| - `stellarforge new` | ||
| - `stellarforge doctor` | ||
| - `stellarforge dev` | ||
| - `stellarforge test` | ||
| - `stellarforge deploy` for Stellar Testnet only | ||
| - global help and version behavior | ||
|
|
||
| The controlled starter-template set is: | ||
|
|
||
| - `basic-app` | ||
| - `full-stack` | ||
| - `smart-contract` | ||
| - `api-service` | ||
|
|
||
| Contributor issues may improve these surfaces without casually changing their public contracts. | ||
|
|
||
| ## Frozen architectural rules | ||
|
|
||
| 1. Commands remain thin orchestration layers. Business/filesystem/process/network logic belongs in focused modules. | ||
| 2. Project configuration remains versioned JSON at `stellarforge.config.json`; executable configuration is not introduced casually. | ||
| 3. CLI option precedence remains explicit and deterministic. Network-sensitive behavior must never silently fall back to Mainnet. | ||
| 4. The generator accepts controlled bundled templates only during v1 stabilization. Arbitrary remote templates, dynamic code loading, and plugin execution are not contributor extensions. | ||
| 5. Filesystem writes must remain contained inside validated destinations and account for traversal, collisions, and symlinks. | ||
| 6. External tools are invoked through executable/argument boundaries. Shell interpolation of untrusted input is prohibited. | ||
| 7. `stellarforge deploy` remains Testnet-only until a separate architecture/security decision explicitly expands deployment scope. | ||
| 8. Signing material remains outside normal project configuration and must not be printed in output/errors. | ||
| 9. Exit-code and safe-error behavior remains centralized. | ||
| 10. PR CI remains unprivileged. Publishing/release execution remains isolated to protected workflows and trusted refs. | ||
| 11. Runtime dependencies remain intentionally minimal. Adding a runtime dependency requires explicit justification and dependency/supply-chain review. | ||
| 12. Supported runtime/platform policy remains Node `>=22.13.0 <25`, npm `>=10.9.0`, with Linux/macOS/Windows coverage unless a maintainer-approved compatibility issue changes it. | ||
|
|
||
| ## Protected/core surfaces | ||
|
|
||
| Changes to these paths or contracts are **maintainer-review required** and should not be redesigned as incidental work: | ||
|
|
||
| ### Architecture and public contracts | ||
|
|
||
| - `docs/adr/**` | ||
| - `docs/architecture/**` | ||
| - `docs/roadmap/v1-readiness.md` | ||
| - public command names, required options, and exit semantics | ||
| - `src/commands/root.ts` | ||
| - `src/cli.ts`, `src/main.ts`, `src/version.ts` | ||
|
|
||
| ### Security and trust boundaries | ||
|
|
||
| - `src/errors/**` | ||
| - `src/output/**` | ||
| - `src/config/**` | ||
| - `src/process/**` | ||
| - `src/deployment/**` | ||
| - `src/generator/validation.ts` | ||
| - `src/generator/template-generation.ts` | ||
| - `src/dev/orchestrator.ts` | ||
| - `src/dev/environment.ts` | ||
| - `SECURITY.md` | ||
| - threat-model and trust-boundary documents | ||
|
|
||
| ### Supply chain and release | ||
|
|
||
| - `.github/workflows/**` | ||
| - `.github/CODEOWNERS` | ||
| - `.github/dependabot.yml` | ||
| - `.changeset/**` | ||
| - `package.json` | ||
| - `package-lock.json` | ||
| - release/versioning policy and `CHANGELOG.md` | ||
|
|
||
| ### Controlled-template contract | ||
|
|
||
| - `src/generator/template-registry.ts` | ||
| - `src/generator/template-sources.ts` | ||
| - introduction/removal/renaming of a top-level `templates/*` template | ||
|
|
||
| A contributor issue may intentionally touch a protected surface when its scope says so. The rule is that protected changes must be explicit, narrowly scoped, tested, and maintainer-reviewed rather than emerging as opportunistic refactors. | ||
|
|
||
| ## Contributor-friendly extension zones | ||
|
|
||
| Good parallel-work areas include: | ||
|
|
||
| - focused diagnostic improvements that preserve the diagnostic result contract; | ||
| - tests and fixtures around existing behavior; | ||
| - documentation examples and troubleshooting corrections; | ||
| - template-local README, examples, tests, and non-secret configuration improvements; | ||
| - error-message clarity that preserves exit-code categories; | ||
| - performance measurements and bounded optimizations; | ||
| - platform-specific regression tests; | ||
| - generated-project quality improvements that do not redefine the generator protocol; | ||
| - accessibility/readability of terminal text without redesigning the output abstraction. | ||
|
|
||
| ## Explicitly gated post-v1 architecture | ||
|
|
||
| Do not implement these from ordinary Wave issues without a maintainer-approved architecture issue/ADR first: | ||
|
|
||
| - plugin architecture or marketplace; | ||
| - `stellarforge add`; | ||
| - remote template registry; | ||
| - project upgrade/migration engine; | ||
| - Mainnet deployment automation; | ||
| - hosted deployment platform; | ||
| - blockchain indexer internals; | ||
| - smart-contract auditing engine; | ||
| - AI-assisted scaffolding; | ||
| - monorepo/workspace management; | ||
| - domain-specific payment, identity, marketplace, DAO, RWA, or enterprise template families. | ||
|
|
||
| ## Parallel-contribution rules | ||
|
|
||
| Each Wave issue must declare: | ||
|
|
||
| - primary workstream; | ||
| - expected file ownership/scope; | ||
| - dependencies and blockers; | ||
| - whether a protected surface is touched; | ||
| - tests required; | ||
| - acceptance criteria; | ||
| - points/difficulty/priority. | ||
|
|
||
| Issues that edit the same core file should be sequenced unless their changes are demonstrably independent. Broad refactors must not be hidden inside feature, docs, or test issues. If implementation reveals an architectural conflict, stop and raise it before redesigning the boundary. | ||
|
|
||
| ## Review triggers | ||
|
|
||
| Maintainer architecture/security review is required when a change: | ||
|
|
||
| - adds a command or changes command semantics; | ||
| - adds a runtime dependency; | ||
| - changes configuration schema/precedence; | ||
| - expands filesystem write scope; | ||
| - changes subprocess/environment handling; | ||
| - handles a new credential/secret type; | ||
| - adds network access or expands deployment networks; | ||
| - adds/removes/renames a controlled template; | ||
| - changes CI permissions, release behavior, or publication controls; | ||
| - changes an ADR, threat boundary, or v1 readiness requirement. | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
🔎 Supported by static analysis
🏁 Script executed:
Repository: DigiNodes/stellarforge-cli
Length of output: 13745
🏁 Script executed:
Repository: DigiNodes/stellarforge-cli
Length of output: 10148
Protect
docs/contributing/wave-architecture.mdfrom unreviewed policy changes.The protected-surfaces list and review triggers omit this file.
.github/CODEOWNERShas no matching entry, anddocs/contributing/repository-ruleset.mdis only intended configuration; it does not enforce settings. A contributor can therefore change the architecture-freeze policy without the required maintainer architecture/security review. Add the exact path to both lists.🤖 Prompt for AI Agents