Skip to content

Releases

laws-v0.7.0

Choose a tag to compare

@github-actions github-actions released this 06 Nov 11:20
397d90c
  • feat(tslaws): laws as calls, law('name', fn) and law.proved(...), work with stock TypeScript; the law keyword and the fork compiler still work, and a project may use one syntax (mixing is refused)
  • feat(tslaws): a faster check: a build cache, one plan per law run in parallel workers, and a narrow type-check environment
  • fix(tslaws): a counterexample corpus saved under an old file name is replayed; a failed build is not cached
  • docs(demo): the videos show both ways to write a law
  • feat: write laws as calls in stock TypeScript, keep the keyword syntax (#19)
  • feat(vscode): the editor understands law syntax, shows live results on every function, and jumps to laws (#17)
  • ci: publish to Open VSX with trusted publishing, under the ts-laws namespace (#20)
  • fix(tslaws): proposed browser and end-to-end laws keep their kind (#16)
  • ci: a blocked release push is a warning, not a failed run (#15)
  • ci: move every workflow action to a Node 24 release (#14)
  • feat(vscode): a TypeScript server plugin so the editor understands law declarations: no red squiggles, with hover, definition, references, rename and completions mapped to the original text
  • feat(vscode): the compiler's law rules (TS9101 to TS9106) are shown as diagnostics after a run
  • feat(vscode): live results in the background with a status after each function, a Laws view, cached results, a CPU and run-time guard, and tslaws.liveBackground
  • feat(vscode): an uncovered function is a hint with Write a law for this function (a proposed laws file only)
  • feat(vscode): Go to Laws, Peek Laws, Go to Implementation and Find All References from a function to its laws, laws as document and workspace symbols, Go to law...
  • docs: how the editor and the law keyword fit together (docs/editor-law-syntax.md)
  • Opt-in: levels from imports and proposals outside the tree. File names stay the default and are fully supported: *.laws.ts, *.browser.laws.ts, *.e2e.laws.ts and the in-tree *.proposed.laws.ts names decide the level and the proposals, and tsc-laws.lock is unchanged. "levels": "imports" in tslaws.json (default "names"; anything else is an error) takes the level from the import graph instead (a helper that reaches tslaws/browser makes a browser law; both APIs is an error naming the chains), and records each file's resolved level in the lock so a change reports as tampered until a person accepts. tslaws propose <file.ts> [--from PATH] writes to the git-ignored .tslaws/proposals/ (added to .gitignore on first use; init does not), tslaws promote <proposal> [--to PATH] moves one into the tree, and tslaws list [--json] shows each laws file's level and standing; check --proposed runs both in-tree and directory proposals. check --proposed --watch reruns when a proposal is saved.
  • "laws" in tslaws.json: globs for laws files with other names (a file counts when it declares a top-level export law). Default unchanged; every laws file of the tree stays locked.
  • tslaws list [--json] and the MCP tool tslaws_list: every laws file and proposal with its level and whether it is accepted, unaccepted or proposed.
  • VS Code: laws files are found by asking tslaws list (falling back to names for an older tslaws), and each shows an Explorer badge for its level (N, B, E, or P for a proposal).
  • Fix: the property worker reused its TypeScript program across checks in one process, so a file added between two checks (a new proposal) failed with "no declaration output".

laws-v0.6.4

Choose a tag to compare

@github-actions github-actions released this 05 Nov 15:03
  • Merge pull request #13 from Jordan-Hall/chore/vscode-listing-metadata
  • chore(vscode): listing metadata for the Marketplace: keywords, GitHub-flavoured readme, Q&A and pricing

laws-v0.6.3

Choose a tag to compare

@github-actions github-actions released this 05 Nov 14:20
  • Merge pull request #10 from Jordan-Hall/ci/extension-publish
  • fix(vscode): the publisher is TS-Laws, as created on the Marketplace
  • ci: publish to the Marketplace with trusted publishing, keeping a PAT as fallback
  • ci: publish the extension to each store only when its token exists, and a guide to switching it on

laws-v0.6.2

Choose a tag to compare

@github-actions github-actions released this 05 Nov 14:27
  • Merge pull request #9 from Jordan-Hall/feat/brand-icons
  • Merge pull request #11 from Jordan-Hall/fix/stateful-shrink
  • Merge fix/stateful-shrink
  • fix(tslaws): shrinking removes any set of elements, not only one run
  • Merge fix/stateful-shrink so CI is green
  • Merge origin/main
  • fix(tslaws): stateful shrinking always reaches the shortest failing sequence
  • docs: use the law-with-a-tick mark, and show it in the README
  • docs: a proper mark for tsc-laws, and every icon size the stores and the repository need

laws-v0.6.1

Choose a tag to compare

@github-actions github-actions released this 05 Nov 13:34
  • Merge pull request #8 from Jordan-Hall/docs/delegation-explainer
  • docs: show both explainer videos in the README
  • docs: an explainer video on laws, migration and delegated accept

laws-v0.6.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 13:36
  • Merge pull request #7 from Jordan-Hall/feat/vscode-live-laws
  • fix(vscode): default-export and excluded-law handling
  • feat(vscode): law failures show live on the law and on the source it exercises

laws-v0.5.2

Choose a tag to compare

@github-actions github-actions released this 05 Nov 11:47
  • Merge pull request #6 from Jordan-Hall/chore/sync-upstream
  • fix(ci): a sync branch without an open PR no longer blocks the weekly sync
  • Merge origin/main into chore/sync-upstream
  • ci: sync with the upstream tsc-ts every week
  • Merge remote-tracking branch 'upstream/main' into chore/sync-upstream
  • Merge pull request #411 from vercel-labs/ctate/prepare-v0-1-ccd382
  • Remove a blank line from the changelog
  • Prepare v0.1.2 release
  • Make @scriptc/threads an optional peer dependency (#410)
  • Order package.json fields as the formatter does
  • Make @scriptc/threads an optional peer dependency
  • Optimize macOS builds with the two-phase profile (#407)
  • Create three checker collections only when they get an entry (#409)
  • Find an intersection's duplicate types by scanning its list (#408)
  • Check out the profile block counts byte for byte
  • Create three checker collections only when they get an entry
  • Find an intersection's duplicate types by scanning its list
  • Optimize macOS builds with the two-phase profile
  • Count every checker in --extendedDiagnostics (#406)
  • Keep the Memory allocs row
  • Count every checker in --extendedDiagnostics
  • Store kind, flags and pos as node fields (#405)
  • Format check-int32-fields.mjs
  • Store kind, flags and pos as fields of a node
  • Pack kind, flags and pos of a node into two words (#404)
  • Pack kind, flags and pos of a node into two words
  • Run a file's grammar checks in its parse thread (#400)
  • Merge main
  • Merge pull request #403 from vercel-labs/ctate/prepare-v0-1-d9c6e5
  • Fix the security finding and CI, and merge main
  • Prepare v0.1.1 release
  • Build with scriptc 0.4.8 and a profile collected with it (#402)
  • Build with scriptc 0.4.8 and a profile collected with it
  • Collect the two-phase profile with the scriptc the build uses (#401)
  • Collect the two-phase profile with the scriptc the build uses
  • Run a file's grammar checks in its parse thread
  • Build the native tsc-ts to unwind exceptions on Linux (#399)
  • Build the native tsc-ts to unwind exceptions on Linux
  • Pick the shared queue's files by their share of the program (#398)
  • Pick the shared queue's files by their share of the program
  • Reuse the type of a completed check for context-free expressions (#397)
  • Mark the finally case as differing from the 7.0.2 oracle
  • Keep the completed-check record out of reduced flow
  • Remove the completed-check record environment switch
  • Reuse the type of a completed check for context-free expressions
  • Reuse the union a list of types was created from (#396)
  • Report a union that is too complex to represent at each expression
  • Reuse the union a list of types was created from
  • Read shared checker results where they wrote them (#395)
  • Name a union origin's field and a property's alias arguments as they are
  • Compute a wildcard module pattern's prefix and suffix once (#394)
  • Read a shared result where the checker that exported it wrote it
  • Format the pattern match the way oxfmt does
  • Compute a wildcard module pattern's parts once
  • Choose the run configuration from paired runs, and date the adoption from any sample (#393)
  • Read three pairs from three runs of each arm, and keep the paired verdict
  • Choose the run configuration from paired runs, and date the adoption from any sample
  • Add TSC_TS_SHARE_PRICE, a per-checker log of what result sharing costs, built only on request (#392)
  • Pair each translation with the computation its producer made
  • Price the replay's posts, takes and wall time from what the run measured
  • Build the result-sharing price log only on request
  • Read the CPUs an automatic configuration may use from the cgroup CPU quota (#391)
  • Read the cgroup v1 quota of a parent cgroup too
  • Lower the CPU count to the cgroup quota
  • Choose a run's configuration from what earlier runs of the project measured (#390)
  • Keep a rejected configuration rejected, and read the sharing fit wherever a count is learned
  • Correct the comment on what the memory estimate costs
  • Adopt a reverted or pinned configuration only from a comparison
  • Decide a project's next configuration from what its earlier runs measured
  • Measure a project's run configuration with `tsc-ts doctor (#388)
  • Report sharing's gain at the count doctor recommends, not the count's
  • Merge main
  • Merge main
  • Turn result sharing on where it pays, and stop it where it stops paying (#389)
  • Print the sharing-signals test as the formatter does
  • Keep the signals the library-bound cut reads, and compare sharing with runs that pin it off
  • Turn result sharing on where it pays, and stop it where it stops paying
  • Mark tsc-ts doctor experimental in its usage and the README
  • Measure a project's run configuration with tsc-ts doctor
  • Write a record of each eligible run, and name it in the section (#387)
  • Write a build project's record, and only for a full check
  • Write a run record after each eligible run, and name it in the section
  • Give each run a configuration, and print it under `--extendedDiagnostics (#386)
  • Give each run a configuration, and print it under --extendedDiagnostics
  • Check that every run configuration prints what one checker prints (#385)
  • Write an emit run's declarations where its tree is compared
  • Check that every run configuration prints what one checker prints
  • Hold an identifier's text in a shared name (#384)
  • Generate an identifier that stores its name
  • Hold an identifier's text in a shared name
  • Prepare v0.1.0 release (#383)
  • Prepare v0.1.0 release
  • Create a shared instantiation's resolved return types right after it (#382)
  • Keep an instantiation's failed export failed when its return types are exported
  • Create a shared instantiation's resolved return types right after it
  • Share results between checker threads behind TSC_TS_SHARE (#381)
  • Name a posted result's checker by the checker count, and give each checker its own forbidden bit
  • Refresh the two-phase profile
  • Write the installed executable once with one write on Linux (#380)
  • Create the launcher's copy exclusively, with mode 0600
  • Keep the executable's mode when the launcher writes it again
  • Write the installed executable once with one write on Linux
  • Target TypeScript 7.1.0-beta: upstream layout, oracles and generated files (#325)
  • Print a mapped type written without a type as tsgo 7.1 does (#379)
  • Print a mapped type written without a type as tsgo 7.1 does
  • Import no export whose name is not an identifier
  • Insert no declaration text as code in completions
  • Keep the recursion identities of invokeOnce's stack entries (#376)
  • Offer only tag names in opening-tag completions
  • Merge main
  • Build with scriptc 0.4.6 and a two-phase profile collected with it (#378)
  • Build with scriptc 0.4.6 and a two-phase profile collected with it
  • Resolve type reference directives against their type root as tsgo does (#377)
  • Resolve type reference directives against their type root as tsgo does
  • Keep the recursion identities of invokeOnce's stack entries
  • Keep CompactLinkTable values only for the pages stored
  • Adapt the contextual return-type inference memo to the TypeScript 7.1 checker
  • Merge main
  • Memoize contextual return type inference walks (#375)
  • Memoize contextual return type inference walks
  • Merge main
  • Restore the one-phase profile collected with scriptc 0.4.5 (#374)
  • Restore the one-phase profile collected with scriptc 0.4.5
  • Keep the one-phase profile's record with the branch's profile
  • Merge main
  • Relate without reporting before relating with an error node (#373)
  • Refresh the profiles with scriptc main e2b95cdee (#372)
  • Relate without reporting before relating with an error node
  • Refresh the profiles with scriptc main e2b95cdee
  • Resolve deferred type arguments before measuring variances for inference
  • Merge main
  • Record block counts beside the two-phase profile (#371)
  • Record block counts beside the two-phase profile
  • Run the object references test on the TypeScript 7.1 API
  • Merge main
  • Name objects the client already holds by their ids in API replies (#370)
  • Format the initialize case of the session's dispatch
  • Name objects the client already holds by their ids in API replies
  • Merge main
  • Keep the one-phase profile for scriptc without a second profile phase (#369)
  • Keep the one-phase profile for scriptc without a second profile phase (#368)
  • Keep the one-phase profile for scriptc without a second profile phase
  • Keep the one-phase profile for scriptc without a second profile phase
  • Merge main
  • Collect the profile in two phases (#367)
  • Collect the profile in two phases (#366)
  • Refresh the profile with both phases
  • Refresh the profile with both phases
  • Keep sparse symbol link columns in pages of present ids (#365)
  • Keep sparse symbol link columns in pages of present ids
  • Collect the tsc-ts profile again after the compact link table change (#363)
  • Test that escaping wildcard exports targets are not searched outside their package (#364)
  • Test that escaping wildcard exports targets are not searched outside their package
  • Collect the tsc-ts profile again after the compact link table change
  • Keep compact link pages' presence bits in 32-bit fields and update their counts at once (#362)
  • Keep compact link pages' presence bits in 32-bit fields and update their counts at once
  • Merge main
  • Choose the cannot-find-name message on failure and walk ahead past dropped JavaScript files (#361)
  • Walk ahead past JavaScript files the loader drops
  • Look up an inference pair's visited status once per invokeOnce (#359)
  • Keep resolved types and signatures in pages of present ids and their values (#360)
  • Narrow uniform primitive unions by === and case without comparing every constituent (#358)
  • Keep resolved types and signatures in pages of present ids and their values
  • Look up an inference pair's visited status once per invokeOnce
  • Merge main
  • Narrow uniform primitive unions by === and case without comparing every constituent
  • Restart a file's references at a lower depth only wi...
Read more

laws-v0.5.1

Choose a tag to compare

@github-actions github-actions released this 05 Nov 11:34
  • Merge pull request #5 from Jordan-Hall/feat/auto-release
  • ci: the release fails when tslaws' version differs from the tag
  • ci: write the GitHub release notes from the changelog section

laws-v0.5.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 11:12

What's Changed

  • feat(tslaws): a person can lend accept to an agent for a limited time by @Jordan-Hall in #4

Full Changelog: laws-v0.4.0...laws-v0.5.0

laws-v0.4.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 10:59

What's Changed

  • style(demo): format the demo scripts with oxfmt by @Jordan-Hall in #1
  • feat(tslaws): bundlerPlugins lets tslaws load .tsrx and other source formats by @Jordan-Hall in #2
  • ci: release tslaws automatically when a merge changes code by @Jordan-Hall in #3

Full Changelog: laws-v0.3.2...laws-v0.4.0