v0.27.0
·
16 commits
to main
since this release
Minor Changes
- Every confirmed finding from the v0.26.0 three-lane AX pass is fixed. First-use healing: an INTERRUPTED dependency install no longer reads as ready (npm writes
node_modules/deepspace/package.jsonlong before it links.bin; readiness now also requires no started-without-done sentinel evidence, so a killed install retries on the next command instead of failing later asvitest: not found). A committed__APP_ID__placeholder now refuses with its own diagnosis (placeholder_committed, actiondeepspace app init [--env <name>], scoped to the SECTION being targeted so a real top-level id with a committed staging placeholder heals the right thing) instead of "this does not look like a DeepSpace app" — the state every GitHub-lane scaffold enters by pushing itself to GitHub; the plainapp_not_initializedrefusal now ships theapp initaction too. GitHub-inferred apps:pull,clone, andworkspace newon an intentionally-empty cloud repo now consult the release ledger (ledger evidence ONLY — a mirror remote on a never-released app is not evidence and does not refuse) and refusesource_managed_by_githubnaming the repository — previously all three prescribeddeepspace push, the PERMANENT DeepSpace claim;pullandworkspace newalso no longer write thespaceremote or the checkout's git identity before refusing, andstatusstops inventing a cloud trunk for such checkouts (trunk.state: "external", markedinferred).deploy --jsoncarries the source evidence the human stream announces (source: {provider, repository?, inferred?} | null). Suggestions:auth statusnow suggestsstatus(the shallowest exact match wins; requiring a globally unique leaf sent it to the fuzzy — and destructive —logout). Collaboration: a never-deployed app'sowner_jwt_missingtells the collaborator the owner must deploy once first (not "redeploy" an app that never deployed);undeploychecks ownership before its consent gate (a collaborator is no longer told to re-run the most destructive verb with--yes); collaborators can READapp collaborators list(mutations stay owner-only; PENDING invites stay visible to the owner alone — unaccepted invitees' emails are not roster data); deploy tells a collaborator they are shipping someone else's app; thenot_app_ownerhint no longer presumes the reader is a current collaborator;transfer offer --jsoncarriesonAcceptance(the loss-of-all-access consequence only the human path printed); deleting a developer account now cascades to the test accounts they created (their user rows and signup attribution included). Secrets:deepspace secrets set KEY --stdinpipes a value without putting it on argv (the CLI's own rule, previously satisfiable only viasecrets upload); an empty piped value refusesempty_inputrather than silently storing "". Tests:test run allre-asserts the port between vitest and Playwright so a winding-down runtime server is never adopted (the cold-start phantom-404 race), and the default suite's skipped-specs correction prints on stderr where captures see it. First-use registration announces the ACCOUNT EMAIL, not "your account".pull's unborn-checkout advice namesgit reset --mixedinstead of steering into a divergent second root; the deploy-lock refusal says to judge liveness by start time, not pid (container zombies read as alive). Scaffolder:create-deepspaceno longer registers at scaffold time — every app registers on first use, logged in or not, so a sparenpm createno longer burns a quota slot (--no-registeris a deprecated no-op — it asks for what now always happens, and refusing it would exit-1 existing scripts);--yes/-yare accepted as no-ops instead of exiting 1; the template's toast viewport no longer swallows clicks under it (pointer-events-none); the template's/api404 guard answers JSON on every method, not only GET; the template's collab spec skips itself (namingtest accounts create --password-stdin) when the account pool is empty instead of failing a cold machine's first run.
Patch Changes
- Widen the deploy app-id guard's documentation exclusion to the whole
_documentation*output family (_documentation/and, for root-mounted
docs sites,_documentation-root/): 0.26.2 excluded only the compiled MDX
chunks, but the prerendered per-page HTML and the root-mounted variant
carry the same__DEEPSPACE_APP_ID__sample text and still refused the
deploy. The subtree is generated entirely by the SDK's docs builder;
app-owned assets stay scanned.