Repository navigation
Releases
Releases · Jordan-Hall/tsc-laws
laws-v0.7.0
- feat(tslaws): laws as calls,
law('name', fn)andlaw.proved(...), work with stock TypeScript; thelawkeyword 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
lawdeclarations: 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
lawkeyword 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.tsand the in-tree*.proposed.laws.tsnames decide the level and the proposals, andtsc-laws.lockis unchanged."levels": "imports"intslaws.json(default"names"; anything else is an error) takes the level from the import graph instead (a helper that reachestslaws/browsermakes 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 astampereduntil a person accepts.tslaws propose <file.ts> [--from PATH]writes to the git-ignored.tslaws/proposals/(added to.gitignoreon first use;initdoes not),tslaws promote <proposal> [--to PATH]moves one into the tree, andtslaws list [--json]shows each laws file's level and standing;check --proposedruns both in-tree and directory proposals.check --proposed --watchreruns when a proposal is saved. "laws"intslaws.json: globs for laws files with other names (a file counts when it declares a top-levelexport law). Default unchanged; every laws file of the tree stays locked.tslaws list [--json]and the MCP tooltslaws_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
- 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
- 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
- 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
- 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
- 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
- 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 doctorexperimental 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...
laws-v0.5.1
- 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
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
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