Repository navigation
Conversation
The project snapshot tells members apart by the identity of their bytes, and the Reverse part encoded its STEP texts afresh on every capture, so a project with an Import never read as saved and every checkpoint rewrote its members. The bytes are now kept by their text and reused while it is unchanged.
A project file's nextFeatureId and nextParameterId were only checked to be numbers, so a counter at or below an existing id handed that id out again and one removal took two features. Loading now moves each counter past the largest id taken, and a name counter must be a whole number.
The STEP texts are held in a plain object, so an Import whose key a project file gave as constructor or toString found a function on the prototype, failed its build with a clone error and saved an empty member. Lookups now take own keys only, and such an Import reads as having no file.
The session told whether the kernel had the scan by its file name, triangle count and alignment, and a smoothed or offset copy keeps all three, so splits, trims, networks and the live map went on reading the scan from before the edit. Every load or swap of the scan is now counted, and the count is part of what the session compares.
A throw while a build's answer was written into the store reached the build's catch, which took it off the running count a second time, and a region read that threw was never taken off at all. Each build is now counted off once, and the region read is counted off whatever happens, failing the build with what went wrong.
The helper kept the promise of its first kernel load, so one load that failed failed every request after it, and the helper's share of the parallel build was lost until the page was reloaded. A failed load is now forgotten and the next request tries again.
The expression parser and the parameter table both recursed as deep as their input, so a project file with deeply nested parentheses or a long chain of parameters failed to open with a raw stack overflow. Expressions now have a nesting and length limit, a stack overflow while evaluating becomes an error of the expression, and the table reads a parameter once the ones it reads are done, so a long chain is read one link at a time.
58 of 65 tasks
This branch has not been deployed
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.
The Reverse engineer items from #34, rebased on 0.9.3. The notes fix is left out because you shipped it in 0.9.3. One commit per item, each with a regression test that fails without it:
project.unsavedwas always true, and recovery rewrote every member every 2 s. The bytes are now reused while the texts are the same.nextFeatureId/nextParameterIdwere only checked to be finite, so a file could set them at or below an id in use, andremoveFeaturethen deleted both. They're moved past the largest id on load, and a non-integernextOfKindis refused.constructoror__proto__found an Object member. Lookups now useObject.hasOwn.syncScandidn't send the new scan, and splits and compares ran on the old one. A scan-change counter now takes part.finishBuildcounted a build off twice, andreadRegionsAgainhad no catch. Each build is now counted off once.Build:
npm run buildpasses.npm test(3104),npm --prefix mcp test, the plugin boundary and units checks, andnpm run e2e:ciall pass.