Repository navigation
Build the VelarScript 1.0 Web foundation - #1
Conversation
|
External dogfood and delivery evidence is now available from the independent public VelarScript-Website repository at commit Its successful CI run checks out the exact toolchain source identity The retained candidate has build ID |
A root-cause pass over the audit's own fixes, run through six independent lenses, found ten design decisions whose cost showed up as clusters of defects rather than as single bugs. Four are settled here. The pattern behind all of them is one the owner named while asking about `watch`: when a construct admits an arbitrary shape, the property you need from it has to be INFERRED, and every inference has an edge that the next round finds — a helper call, then an alias, then a `let`. Narrowing the construct ends the chase, and it makes the rule easier to state. R15 does that twice. A `watch` subject is now the name of a `state` or a `computed`, or a read path into one — no operators, no calls — so which state a watch depends on is declared rather than deduced. And `cached` is deleted: its intrinsic was literally named `reactive.computed`, it was the same cache as `computed` read by calling instead of bare, and its `() -> T` type was indistinguishable from any zero-argument function, which is why the compiler could not see it was a derived value. That is where D69's silently-dead watch came from. `computed` already caches; nothing was lost but a second spelling. R17 finishes what R12 started. R12 refused `any` at export positions; the boundary now hands back `unknown`, so a foreign value must be validated before a member, call or operator touches it, and `any` can no longer originate anywhere. R18 gives `@iterate:` an async form, so an async stream is declared like a synchronous one — and deletes the source comments that justified duck-typing by an ownership question the code never asked. R19 states the layering the tree was already half-following: compile time decides what it can, the runtime decides what only exists at run time, and only what neither can decide reaches the owner. Its first application is route overlap, which now sees through the path-preserving combinators and re-checks the assembled table at startup. Three gates carried numbers the code had outgrown — the tour-coverage floors, the boundary gate's pre-R17 phrase, and a module count the gate and its test read from two different rosters, differing by the one surface (`velar/serve`) that the CLI facade composes twice. The last is the audit's own shape #1 hiding in the gate meant to catch it. `npm run check` passes and 2198 tests pass with none failing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
What changed
@velarscript/webextensioncreate-velarscaffolder, npm-backed dependency commands, framework-host boundaries, reproducible packed-toolchain rehearsal, and installed-project acceptancedomId, and makes defaultable parameters precise in function identity, assignability, hover, and signature helpWhy
VelarScript is intended to be a clean Web-first language and framework rather than a compiler with hidden Web behavior inside the CLI. This change establishes separate compiler, Web framework, creator, application, and generic-editor boundaries while keeping JavaScript runtime semantics.
User impact
A new project can be created, checked, tested, built, verified, and browser-tested entirely from packed Velar packages. Web applications use explicit
@velarscript/webextension ownership, and Workbench consumes standard compiler/LSP results without embedding Velar language rules.Validation
npm run checknpm test— 197 compiler/CLI tests plus FlowBoard, SupportDesk, and API Dashboard Core suitesnpm run test:packagesnpm run test:browser— development, verified CSP production, Chromium, Firefox, WebKit, real applications, and installed-project acceptancenpm run checkbun run typecheck