feat(create,tools,ci): qualify create/starter/examples as external consumer paths (#1228, B2.5) - #1309
Merged
Merged
Conversation
added 4 commits
September 4, 2026 18:41
…on (#1228) L9: every create failure mode (invalid name, existing directory, permission/write errors, unexpected defects) now exits 1 with one actionable message via a top-level catch — never a stack trace. L11: validateProjectName enforces npm package-name rules (lowercase, start with letter/number, [a-z0-9._-], 214-char ceiling) and rejects '..' traversal segments before any filesystem work, with unit and subprocess tests.
…ts (#1228) Extend consumer-packaged-starter.ts (CI gate consumer:packaged) from check+build to the complete adopter lifecycle against the five packed tarballs in a hermetic scratch outside the workspace: dev (vite dev server SSR probe), check, test, build, start (cli/start HTTP probes for static, request-time and API routes), deploy (standalone dist/server/serve.mjs probes), and preview (fail-closed refusal with start guidance for a dynamic app, #601).
) The deployment guide and PACKAGE_SURFACE.md claim generated artifacts run on Bun; the only evidence was local. Add bun-serve-smoke to autoflow-ci: the request-time fixture is built and its standalone serve.mjs is booted under Bun 1.4.1 (release download pinned by SHA-256, verified against oven-sh/bun SHASUMS256.txt) with the same HTTP probes as the Node 24 leg. The job joins the pr-full-ci-evidence needs list; the workflow contract test is updated to match.
…to the published line (#1228) Desktop examples: the bounded-repair probe showed the route-module restructure cascades into full render() re-authoring (OEC9007/OEC9006 behind OEC9008), so the examples are excluded from qualifying consumer evidence with a documented carry to Beta.3 (B3.8); check/smoke stay green and CI-gated. open-element-in-fresh: move @openelement/ui from the stale ^0.42.0 to the published 0.44.0-beta.1 the README already claims; deno task check passes against the packed/published surface.
Contributor
|
APIError: Insufficient Balance |
Deploying openelement with
|
| Latest commit: |
27123d9
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://9cd765af.lessjs.pages.dev |
| Branch Preview URL: | https://kimi-v044-b2-5-consumer-qual.lessjs.pages.dev |
This was referenced Sep 4, 2026
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Problem
#1228 (B2.5, stage #1288, umbrella #1155): a new external user must be able to create → install → dev → check → test → build → start/preview → deploy from packed/published artifacts, without monorepo-only assumptions. Before this PR the packed-starter gate (
consumer:packaged) only rancheck+build; dev/start/preview/deploy were unqualified from packed artifacts, the create CLI's name validation predated npm-name rules and unexpected failures vomited stack traces, Bun support was claimed in docs with local-only evidence (carried risk #7), and the desktop examples' OEC9008 build failure was an open carried risk (#1).Contract override (authoritative, recorded per dispatch): B2.5 qualifies fresh v0.44 consumption only. The issue text's "migration guidance from v0.43.3" requirement is removed by stage ruling (stage #1288 body: "B2.5 has NO 0.43.3→0.44 migration-guide requirement — no meaningful external 0.43 consumer base"). No migration guide is written in this PR.
Owner
Single implementer executor (kimi-code,
.agents/v044-kimi-implementer.md), one branch, one PR.Before
tools/consumer-packaged-starter.tsran the packed create CLI, then onlydeno task checkanddeno task buildin the scratch starter.packages/create/src/cli.ts: name regex^[a-zA-Z0-9_-]+$(allowed uppercase, leading_/-, unbounded length); write-loop and template failures escaped as unhandled rejections with stack traces.dist/server/serve.mjsclaimed bywww/content/guide/deployment.md(+ zh),docs/current/PACKAGE_SURFACE.md, README — evidence local-only (Beta.1 closure, Bun 1.4.0), no CI leg.npm:vite build(carried risk Bug: serializeAttributes() missing camelToKebab - Lit attribute observer cannot recognize camelCase props #1).examples/open-element-in-freshpinnednpm:@openelement/ui@^0.42.0while its README claimed maintenance against0.44.0-beta.1.After
pack:dry-runtarballs in a hermetic scratch outside the workspace: dev → check → test → build → start → deploy (dist/server/serve.mjs) → preview (fail-closed assertion). Gated in CI as the existingconsumer:packagedautoflow gate (ci + release tiers).error: …), exit 1, no stack trace. Existing-dir errors now carry resolution guidance; permission/write failures name the target and advise removing the partial directory.validateProjectName()enforces npm package-name rules (lowercase, starts[a-z0-9], charset[a-z0-9._-], 214-char ceiling) and rejects..segments, ahead of the retained resolve-based traversal defense. Unit + subprocess tests.bun-serve-smokejob in autoflow-ci builds the request-time fixture and bootsdist/server/serve.mjsunder pinned Bun 1.4.1 (SHA-256 pinned download, verified against oven-sh/bunSHASUMS256.txt), asserting/and/liveover HTTP — the same probes as the Node 24 leg. Added to thepr-full-ci-evidenceneeds list (workflow contract test updated). The doc claims stand because they are now true and gated. Scope note: the create/build toolchain is Deno-hosted by contract (PACKAGE_SURFACE.md ownership rules), so the Bun claim covers generated artifacts only — which is exactly what the leg qualifies.render()) and OEC9006 (undecorated fields) — i.e. a full re-authoring of nine large renders against the compiled grammar with no browser E2E safety net. Not provably cheap; documented indocs/current/DENO_DESKTOP_TARGET.md+ both example READMEs.deno task check/smokefor both examples stay green and CI-gated viaexamples:check.examples/open-element-in-freshnow consumes the published@openelement/ui@0.44.0-beta.1(exact pin;deno task checkgreen against it), closing the README/truth gap.Why not second owner
One bounded slice, one coherent qualification surface (create/starter/examples + their gates); splitting ownership across the walkthrough, the Bun leg and the examples adjudication would only add handoff cost. No architecture, public-API or release-lane changes required a second role.
Evidence
Lifecycle walkthrough (
deno task consumer:packaged, local macOS arm64, Deno 2.9.0, tarballs fromdeno task pack:dry-run, scratch under$TMPDIRoutside the workspace):Per runtime: Deno 2.9.0 hosts the toolchain legs (by contract); Bun 1.3.5 local probe
bun dist/server/serve.mjs→/and/live200 with expected markers (exit 0), Bun 1.4.1 is the pinned CI leg; Node 24 serving remains gated by the existingnode-serve-smokejob.Checks run locally (all exit 0): root
deno task test(1866 passed + supabase 150 passed),consumer:packaged,examples:check,publish:npm:dry-run(all five packages pack; registry skip at 0.44.0-beta.1),package-surface:check,interface:snapshot,typecheck,freeze:semantics:check,actions:check-pins,workflow:check-slimming,docs:check-current,deno fmt --check,deno lint, markdownlint (changed files), actionlint. Create suite: 18/18 including 4 new L9/L11 tests (RED proven first:TS2305 … no exported member 'validateProjectName').Scope
Touched:
packages/create/**(L9/L11),tools/consumer-packaged-starter.ts(lifecycle),.github/workflows/autoflow-ci.yml+tools/autoflow/__tests__/pr-ci-workflow.test.ts(Bun leg),docs/current/DENO_DESKTOP_TARGET.md, desktop example READMEs (OEC9008 carry),examples/open-element-in-fresh/deno.json+ lock (published-line pin). No frozen paths touched; no new packages; no architecture changes.Risk
Closes #1228