All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Release Tag:
v2.0.0.1
- Release revision documentation in
docs/ReleaseNotes.md, covering the complete change set sincev2.0.0. tsc lint --fixsupport for applying safe linter fixes from the command line.- Additional stdlib registration and behavior tests across database, CSV, JWT, PDF, FTP, math, media, and notification modules.
- Additional AST, parser, runtime, web, and package-manager coverage for previously untested paths.
- Reduced formatter, VM debugger, bytecode disassembler, LSP, IR, package-manager, and stdlib allocation overhead on hot paths.
- Closed missing capability checks in web, notification, canvas, and related privileged operations.
- Fixed command-injection risks in the doctor command and Windows notification handling.
- Corrected the loopback IP safety validation and several documentation links.
- Optimized IR predecessor mapping, diagnostic quick-fix lookup, LSP character lookup, SQLite query preparation, and capability validation.
- Refactored large stdlib, DSL, semantic-analysis, resolver, packager, and CLI functions into smaller units without changing public behavior.
- Added release guidance for the
vMAJOR.MINOR.PATCH.REVISIONtag convention. Cargo packages remain at SemVer2.0.0for this revision release.
No breaking syntax changes will be made after this release in the 2.x series.
Five language design questions were locked permanently on 2026-07-26:
| Decision | Resolution |
|---|---|
compat/ handling |
examples/compat/ kept permanently; each file gets # LEGACY COMPAT TEST header |
| Stdlib call style | Qualified (math.abs(), json.parse()); implicit only for true built-ins (say, ask, env, file) |
| Null literal | null is canonical; none is deprecated alias → TSW1011 |
| Loop semantics | loop N = counted (runs exactly N times); repeat cond = while (runs while condition is true) |
| String interpolation | $"..." is canonical; f"..." is deprecated alias → TSW1012 |
Looptoken variant — new canonical keywordloopfor counted loops (loop N)Paralleltoken variant — new canonical keywordparallelfor parallel blocksDefaulttoken variant — new canonical keyworddefaultfor match default arms- Full TSW error code namespace — TSW1001–TSW1014, TSW2001–TSW2002, TSI3001 all defined
docs/engineering/LANGUAGE_FREEZE_2.0.md— permanent freeze declaration document- Expanded semantic analysis — 10 canonical rules now formally documented in
10_semantic_analysis.md - Full grammar expansion —
03_grammar_ebnf.mdupdated with lambda, bitwise ops, DSL, parallel,$"...",loop, and complete operator precedence
token_kind.rs— inverted canonical/deprecated classification:- Canonical 2.0 (no warning):
do,send,when,loop,repeat,for,in,match,case,default,try,catch,throw,use,class,struct,enum,trait,interface,const,null,say,ask,break,continue,else,async,await,parallel,end,export,new,self,true,false,typeof,with - Deprecated Alias (emit TSW):
build,make,return,model,if,elif,while,import,from,let,var,fun,function,attempt,none,keep,give,stop,skip,each,switch,be,equals,then
- Canonical 2.0 (no warning):
errors/src/lib.rs— E0104 description updated to "Expectedendto close block"to_canonical()— inverted: now mapsBuild→Do,Return→Send,If→When,While→Repeat,Model→Class,Import/From→Use, etc.is_canonical_keyword()— updated to reflect 2.0 canonical setis_alias_keyword()— updated to reflect 2.0 deprecated setis_future_reserved_keyword()— narrowed to onlyType,Yield,Spawn,Pub,MutFStringStart.static_lexeme()— changed fromf"to$"(canonical)
docs/engineering/01_language_spec_v1.md— full rewrite; all canonical keywords correctdocs/engineering/03_grammar_ebnf.md— expanded with all missing grammar rulesdocs/engineering/10_semantic_analysis.md— expanded with 10 canonical semantic rulesdocs/engineering/14_error_codes.md— full TSW namespace documenteddocs/StyleGuide.md— full rewrite withtsc fmtspecificationdocs/MigrationGuide.md— rewritten as 1.0.8 → 2.0 guidedocs/LanguageGuide.md— updated with$"...",loop,parallel,nullexamplesREADME.md— hero example updated to canonical 2.0 syntax
examples/compat/files — added# LEGACY COMPAT TESTheader to each file
The following keywords, previously documented as canonical in some docs, are now officially deprecated and will emit warnings:
build, make, let, var, return, give, if, elif, while,
import, from, each, attempt, model, none, f"...", keep,
stop, skip, switch, then, be, equals
These keywords continue to compile in the 2.x series. They are never removed —
only deprecated. Run tsc migrate . to auto-convert.
- Created 17 Cargo workspace member crates, covering the entire compiler, runtime, and tools stack.
- Unified common types (
Span,NodeId,Ident) inside thetechscript_commoncrate. - Unified syntax constants, keyword lists, tokens, and operator precedence levels inside the
techscript_syntaxcrate. - Scaffolding skeleton for all remaining modules: AST, Lexer, Parser, Errors, Semantic Analyzer, Interpreter, VM, GC, Builtins, Stdlib, CLI, LSP, Formatter, Linter, and Package Manager.
- Established default placeholder unit tests and example entry points.
- Configured CI/CD workflows and GitHub templates.