Does IEC 62304 require or forbid JavaScript obfuscation?
Neither, and the standard does not contain the word. It is written as a set of lifecycle activities and the records they produce: planning, requirements, architecture, implementation, integration and system testing, release, maintenance and problem resolution. Each of those is something you do and document. None of them constrains how the delivered code is written, so there is no obligation you discharge by protecting a bundle and none you breach by doing so. What the standard does reach, indirectly, is the inventory of components you did not write and your ability to say exactly what a given release contained.
Does protecting our front end change our software safety classification?
It does not. The class follows the harm a failure could contribute to, which is a question about what the software can do and what happens when it does the wrong thing. Readability of the delivered code appears nowhere in that test. A protected front end carries exactly the class an unprotected one does. The consequence worth writing down is the reverse direction: because obfuscation does not change the class, it also cannot be used to argue a class down, and any hazard analysis that tries to is making a claim an assessor will remove.
Can we list obfuscation as a risk control in the hazard analysis?
It is a poor fit and we would advise against it. A risk control has to be specified, implemented, verified and shown to be effective, and its effectiveness has to be re-checkable by somebody who is not you. Difficulty of reading is the least measurable property a program has: there is no test that passes or fails, no threshold, and no way for a reviewer to reproduce your assessment. Describe protection accurately in your design documentation as an anti-tampering and intellectual property measure, and put the controls that carry safety weight where they can be tested.
How does protection affect our SOUP inventory?
It depends entirely on how you produce the inventory, and the difference is stark. A list derived from your dependency manifest and lock file is generated before bundling, so a later protection step cannot touch it and everything in it stays accurate. A list produced by pointing a scanner at your built output is destroyed, because such tools match on library version strings, banner comments and identifier shapes, all of which renaming and string handling remove. The rule that follows is general: every control that works by reading code must run before the protection step, not after it.
What happens to vulnerability scanning of the shipped bundle?
The same mechanism produces a more dangerous outcome. A dependency with a known defect remains exactly as exploitable after protection as before, because the code still runs. What changes is that the scanner watching for it stops recognising anything, and an empty result is displayed identically to a clean result. Point composition and vulnerability analysis at the pre-protection artifact and the lock file, treat the protected output purely as a delivery format, and record in your process which artifact each check was run against.
Which artifact should our verification testing run against?
The one you release. This is the complementary half of the ordering rule and it points the other way: anything that works by executing the software, including integration testing, system testing, usability validation and accessibility checks, belongs on the protected build because that is what reaches the user. Anything that works by reading the software belongs before protection. Splitting your evidence along that line is straightforward once it is written down and awkward to reconstruct afterwards.
How do we keep release records when the output changes on every build?
Use the seed setting, which exists for this. By default the engine produces different output for the same input on each run, which is a genuine protection property and unhelpful for anyone maintaining a device history file. Supplying a fixed seed makes the same input, the same options and the same seed produce byte-identical output, so a release can be rebuilt and compared rather than merely described. The build manifest records a hash of every source file and every output file, which is what ties a shipped artifact back to the inputs that produced it.
Where does our source code go when we protect it?
That depends on which path you use, and it is worth answering precisely because a supplier assessment will ask in writing. The hosted service receives the JavaScript you select, protects it and deletes the request file after the run. The Windows desktop application also offers local processing, where the source body stays on the device, and the command line tool has a local mode with the same property. Those local paths still make an online entitlement check, which carries no source. Virtual machine protection is hosted by design, so exclude that option if your policy forbids source leaving your environment.
Are the runtime defence options appropriate in a clinical interface?
Two of them deserve an explicit decision rather than a default. The option that blocks developer-tools shortcuts also cancels every context-menu event on the page, and that event is reachable from the keyboard, so the block removes a route to the browser's own reading and translation features. The integrity guard treats replacement of built-in functions as hostile, which is exactly how assistive software and accessibility overlays work, so it can fire on a legitimate user's own tooling. Neither is prohibited. Both are choices you should be able to justify in a usability engineering file.
What is the shortest useful checklist for a device software team?
Five items. Confirm with your regulatory function whether the front end is inside the device software at all, because that decides the rest. Generate the component inventory from your lock file, before bundling. Run composition and vulnerability analysis on the pre-protection artifact, and record which artifact each check used. Adopt a fixed seed and retain the build manifest so any release can be rebuilt and compared. And read your risk file for any control whose effectiveness depends on the code being hard to read, then replace it with something a third party can verify.